游戏程序设计-蛇身数组-C++贪吃蛇

今天分析到蛇身这里。这里用的是数组的手法。在这里插入图片描述
在这里插入图片描述
于是写的代码如下:`插入插入插入#include;

#include<windows.h>;
#include<conio.h>;
using namespace std;
bool gameOver;
const int width = 20;
const int height = 5;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;
int i, j;
enum eDirection { STOP = 0,LEFT,RIGHT,UP,DOWN };
eDirection dir;


void Initial()
{
	gameOver = false;
	dir = STOP;
	x = width / 2;
	y = height / 2;
	fruitX = rand() % width;
	fruitY = rand() % height;
}
void Draw()
{
	system("cls");
	HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
	int textColor = 0x06;
	SetConsoleTextAttribute(h, textColor);
	for (int i = 0; i < width+2; i++)
		cout << "1";
	cout << endl;
	for (int j = 0; j < height; j++)
	{
		for (int i = 0; i < width; i++)
		{
			if (i == 0)
				cout << "2";
			if (i == x && j == y) {
				textColor = 0X0a;
				SetConsoleTextAttribute(h, textColor);
				cout << "O";
			}

			else if (i == fruitX && j == fruitY)
			{
				textColor = 0x084;
				SetConsoleTextAttribute(h, textColor);
				cout << "F";
			}
			else 
			{
				bool flagPrint = false;
				for (int k = 0; k < nTail; k++)
				{
					if (tailX[k] == i && tailY[k] == j) 
					{
						cout << "o";
						flagPrint = true;
					}
				}
				textColor = 0x06;
				SetConsoleTextAttribute(h,textColor);
				if(flagPrint)
					cout << " ";
			}
			
			if (i == width - 1)
				cout << "3";

		}
		cout << endl;

	}
	for (i = 0; i < width+2; i++)
		cout << "4";
	cout << endl;
	cout << "游戏得分" << score << endl;
}
  
void Input()
{
	if (_kbhit())
	{
		switch (_getch())
		{
		case'a':
			dir = LEFT;
			x--;
			break;
		case'd':
			dir = RIGHT;
			x++;
			break;
		case'w':
			dir = UP;
			y--;
			break;
		case's':
			dir = DOWN;
			y++;
			break;
		case'x':
			gameOver = true;
			break;
		default:
			break;
		}
	}
}
void Logic()
{	
	int prevX = tailX[0];
	int prevY = tailY[0];
	int prev2X;
	int prev2Y;
	tailX[0] = x;
	tailY[0] = y;

	for (i = 1; i < nTail; i++)
	{
		prev2X = tailX[i];
		prev2Y = tailY[i];
		tailX[i] = prevX;
		tailY[i] = prevX;
		prevX = prev2X;
		prevY = prev2Y;



	}
	for (int i  = 0; i < nTail; i++)
		if (tailX[i] == x && tailY[i] == y)
			gameOver == true;
	for (int i = 0; i < nTail; i++)
		if (tailX[i] == x && tailY[i] == y)
			gameOver == true;

	if (x > width || x<0 || y>height || y < 0)
		gameOver = true;
	if (x >= width) x = 0;else if (x < 0);x = width - 1;
	if (x >= height)y = 0; else if (y < 0)y = height - 1;
	if (x == fruitX && y == fruitY)
	{
		score += 10;
		fruitX = rand() % width;	
		fruitY = rand() % height;
		nTail++;
	}
}

int main()
{	
	

	Initial();
	while (!gameOver)
	{
		Draw();
		Input();
		Logic();
	}
	
	system("pause");
	return 0;
}`

自我感觉非常良好。但是却出了问题在这里插入图片描述
哼心情极差。烦死了。
在这里插入图片描述
然后发现自己的widthheight设置不合理。改正之后是这样
在这里插入图片描述
在这里插入图片描述
害。3号墙又作什么妖了。我感觉这一点问题都没有。
下 先把绘制蛇身o的部分注释掉。成了这个样子在这里插入图片描述
初始蛇头坐标在最右侧。并且不能左右移动。当我把所写的数组部分注释掉时,发现水果坐标竟然无法自动更新位置。
在这里插入图片描述
迅速做出一个公主落泪的动作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值