اطلاعیه

Collapse
No announcement yet.

کد بازی 2048 در کنسول !

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کد بازی 2048 در کنسول !

    سلام.
    اینو چند روز پیش نوشتم. گفتم بزارم بقیه هم استفاده کنند. کار نسبتا ساده ای بود البته این الان بازنده رو تشخیص نمیده :smile:
    اونو دیگه خودتون اضافه کنید و اگه خواستید تو همین تاپیک بزارید.

    البته یه سری مشکلات جزعی هست که میشد رفعش کرد ولی کد رو از سادگی در می اورد. مثلا الان پاک کردن صفحه یه کمی کند هست و پرش معلومه. دستورات خاص خودش بود ولی یکم کارو پیچیده میکرد.

    با کلید ها WASD کار میکنه :redface:


    اگه خوشتون اومد صلواتی برای تعجیل در فرج آقا صاحب الزمان بفرستید :smile:

    استفاده به عنوان پروژه دانشگاه و .... اکیدا ممنوع مگر اینکه خودتون یادش بگیرید و دوباره بنویسید. در غیر اینصورت بنده هیچگونه رضایتی ندارم.

    کد:
    #include <iostream>
    #include <conio.h>
    #include <time.h>
    #define D_KEY 'D'
    #define W_KEY 'W'
    #define S_KEY 'S'
    #define A_KEY 'A'
    
    #define _0_KEY '0'
    
    #define EMPTY_TILE -1
    
    using namespace std;
    
    void WaitForLastKey();
    void Init();
    void DrawTable();
    void Step();
    void MoveUp();
    void MoveRight();
    void MoveDown();
    void MoveLeft();
    void CreateRandomTile(bool shouldBeEmpty);
    void SetFakseAllMergedTile();
    char lastKey;
    int tiles[4][4];
    int tileLengths[4][4];
    bool mergedTiles[4] = {false, false, false, false};
    bool moved = false;
    int main(int argv, char* args[])
    {
    	Init();
    
    	DrawTable();
    	
    
    	while(lastKey != _0_KEY)
    	{
    		WaitForLastKey();
    		Step();
    		DrawTable();
    	}
    }
    
    void WaitForLastKey()
    {
    	char key = 0;
    	while( (key != W_KEY) &&
    		  (key != D_KEY) &&
    		  (key != S_KEY) &&
    		  (key != A_KEY) &&
    		  (key != _0_KEY))
    	{
    		key = _getch();
    		key = toupper(key);
    	}
    	lastKey = key;
    
    }
    
    void Init()
    {
    	for(int i=0; i<4; i++)
    		for(int j=0; j<4; j++)
    			tiles[i][j]=EMPTY_TILE;
    	srand(time(NULL));
    	CreateRandomTile(false);
    	CreateRandomTile(false);
    
    }
    
    void CreateRandomTile(bool shouldBeEmpty)
    {
    	int x = 0;
    	int y = 0;
    	int number = 2;
    	int numberSelector = 0;
    	do
    	{
    		x = rand()%4;
    		y = rand()%4;
    	}while((shouldBeEmpty == false ? false : tiles[x][y] != EMPTY_TILE));
    	numberSelector = rand()%4;
    	if(numberSelector < 3)
    		number = 2;
    	else
    		number = 4;
    	tiles[x][y] = number;
    	 
    }
    
    void DrawTable()
    {
    	for(int i=0; i<4; i++)
    	{
    		for(int j=0; j<4; j++)
    		{
    			if(tiles[i][j] < 1)
    				tileLengths[i][j] = 0;
    			else if(tiles[i][j] < 10)
    				tileLengths[i][j] = 1;
    			else if(tiles[i][j] < 100)
    				tileLengths[i][j] = 2;
    			else if(tiles[i][j] < 1000)
    				tileLengths[i][j] = 3;
    			else if(tiles[i][j] < 10000)
    				tileLengths[i][j] = 4;
    			else if(tiles[i][j] < 100000)
    				tileLengths[i][j] = 5;
    			else if(tiles[i][j] < 1000000)
    				tileLengths[i][j] = 6;
    
    		}
    	}
    	system("cls");
    	cout <<"|------|------|------|------|\n";
    	for(int j=0; j<4; j++)
    	{
    		cout<<"|   |   |   |   |\n"<<"|";
    		for(int i=0; i<4; i++)
    		{
    			
    			if(tiles[i][j] != EMPTY_TILE)
    			{
    				cout << tiles[i][j];
    			}
    			for(int _i=0; _i<6-tileLengths[i][j]; _i++)
    				cout<<" ";
    			cout<<"|";
    		}
    		cout <<"\n|   |   |   |   |\n|------|------|------|------|\n";
    	}	
    }
    
    void Step()
    {
    	if(lastKey == W_KEY)
    	{
    		MoveUp();
    	}
    	else if(lastKey == D_KEY)
    	{
    		MoveRight();
    	}
    	else if(lastKey == S_KEY)
    	{
    		MoveDown();
    	}
    	else if(lastKey == A_KEY)
    	{
    		MoveLeft();
    	}
    	if(moved)
    	{
    		CreateRandomTile(true);
    		SetFakseAllMergedTile();
    		moved = false;
    	}
    }
    
    void MoveUp()
    {
    
    	for(int i=0; i<4; i++)
    	{
    		for(int j=0; j<4; j++)
    		{
    			for(int _j=0; _j<j; _j++)
    			{
    				for(int __j=0; __j<j; __j++)
    				{
    					if(__j<3)
    					{
    						if(tiles[i][__j] == EMPTY_TILE)
    						{
    							tiles[i][__j] = tiles[i][__j+1]; 
    							tiles[i][__j+1] = EMPTY_TILE;
    							moved=true;
    						}
    						else if((tiles[i][__j] == tiles[i][__j+1]) && !mergedTiles[__j+1])
    						{	
    							tiles[i][__j] *= 2;
    							tiles[i][__j+1] = EMPTY_TILE;
    							mergedTiles[__j] = true;
    							moved=true;
    						}
    					}
    				}
    			}
    		}
    	}
    }
    void MoveRight()
    {
    	for(int j=0; j<4; j++)
    	{
    		for(int i=3; i>0; i--)
    		{
    			for(int _i=i; _i>0; _i--)
    			{
    				for(int __i=i; __i>0; __i--)
    				{
    					if(__i>0)
    					{
    						if(tiles[__i][j] == EMPTY_TILE)
    						{
    							tiles[__i][j] = tiles[__i-1][j]; 
    							tiles[__i-1][j] = EMPTY_TILE;
    							moved=true;
    						}
    						else if((tiles[__i][j] == tiles[__i-1][j]) && !mergedTiles[__i-1])
    						{
    							tiles[__i][j] *= 2;
    							tiles[__i-1][j] = EMPTY_TILE;
    							mergedTiles[__i] = true;
    							moved=true;
    						}
    						
    					}
    				}
    			}
    		}
    	}
    }
    void MoveDown()
    {
    	for(int i=0; i<4; i++)
    	{
    		for(int j=3; j>0; j--)
    		{
    			for(int _j=j; _j>0; _j--)
    			{
    				for(int __j=j; __j>0; __j--)
    				{
    					if(__j>0)
    					{
    						if(tiles[i][__j] == EMPTY_TILE)
    						{
    							tiles[i][__j] = tiles[i][__j-1]; 
    							tiles[i][__j-1] = EMPTY_TILE;
    							moved=true;
    						}
    						else if((tiles[i][__j] == tiles[i][__j-1]) && !mergedTiles[__j-1])
    						{
    							tiles[i][__j] *= 2;
    							tiles[i][__j-1] = EMPTY_TILE;
    							mergedTiles[__j] = true;
    							moved=true;
    						}
    						
    					}
    				}
    			}
    		}
    	}
    }
    void MoveLeft()
    {
    	for(int j=0; j<4; j++)
    	{
    		for(int i=0; i<4; i++)
    		{
    			for(int _i=0; _i<i; _i++)
    			for(int __i=0; __i<i; __i++)
    			{
    				if(__i<3)
    				{
    					if(tiles[__i][j] == EMPTY_TILE)
    					{
    						tiles[__i][j] = tiles[__i+1][j]; 
    						tiles[__i+1][j] = EMPTY_TILE;
    						moved=true;
    					}
    					else if((tiles[__i][j] == tiles[__i+1][j]) && !mergedTiles[__i+1])
    					{
    						tiles[__i][j] *= 2;
    						tiles[__i+1][j] = EMPTY_TILE;
    						mergedTiles[__i] = true;
    						moved=true;
    					}
    						
    				}
    			}
    		}
    	}
    }
    
    void SetFakseAllMergedTile()
    {
    	for(int i=0; i<4; i++)
    	{
    		mergedTiles[i] = false;
    	}
    }
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...
لطفا صبر کنید...
X