听说想看贪吃蛇的代码,我抽空就用C大概写了一份

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <Windows.h>
#include <time.h>
#include <conio.h> /*键盘输入获取*/
#define STOP   0
#define LEFT   1
#define RIGHT  2
#define UP     3
#define DOWN   4

int masterx[25] = {0},mastery[50] = {0};
int master_len = 3;
int weight = 25,height = 50;
int targetx,targety;
int Dir = UP;
int lastx,lasty;
int socres = 0;
int gameOver;

void menu(void);
void draw(void);
void master_init(void);
int logic(void);
void input_cmd(void);
void run(void);

int main(void)
{
	int chance = 1;
	while(1)
	{
		menu();
		printf("请选择:");
		scanf("%d",&chance);
		printf("你的选择是:%d\n",chance);
		getchar();
		system("cls");
		sleep(1);
		master_init();
		draw();
		//sleep(10);
		while(1)
		{
			run();
			if(!logic()) break;
			input_cmd();
			if(gameOver) return;
			system("cls");
			printf("得分:%d\n",socres);
			draw();			
			sleep(1);
		}
	}
	return 0;
}

void menu(void)
{
	system("cls");
	printf("----------------------------------------\n");
	printf("----------------1、开始-----------------\n");
	printf("----------------2、退出-----------------\n");
	printf("----------------------------------------\n");
}
void master_init(void)
{
	int i = 0;
	memset(masterx,0,sizeof(masterx));
	memset(mastery,0,sizeof(mastery));
	srand(time(NULL));
	targetx = rand()%weight;//随机生成一个目标地址
	targety = rand()%height;	
	for(i = 0; i < 3; i++)//给蛇定义一个初始化的位置
	{
		masterx[i] = weight/2 + i;
		mastery[i] = height/2 ;
		while(1)//防止出现蛇和食物在同一个位置
		{
			if(masterx[i] == targetx && mastery[i] == targety)
			{
				targetx = rand()%weight;//随机生成一个目标地址
				targety = rand()%height;	
			}
			else break;				
		}
	}	
}
void draw(void)
{
	int i= 0,j = 0,k = 0,flag = 0;		
	for(i = 0; i < 27; i++)//行
	{
		for(j = 0; j < 52; j++)//列
		{
			if(i == 0 || i == 26) printf("-");
			else if(j == 0 || j == 51) printf("|");
			else
			{
				flag = 0;
				for(k = 0; k < master_len;k++)
				{
					if(masterx[k] == i && mastery[k] == j) 
					{
						flag = 1;
						break;
					}
				}
				if(flag) printf("*");//蛇的身体
				else if(targetx == i && targety == j) printf("0");//食物
				else printf(" ");//空白
			}
		}
		printf("\n");
	}	
}
void input_cmd(void)
{
	int hit;
	if(_kbhit())
    {
        /*获取键盘的输入字符*/
        switch(_getch())
        {
            case '4':
            case 75:/*左键*/
                Dir = LEFT;                
                break;
            case '8':
            case 72:/*上键*/
                Dir = UP;               
                break;
            case '6':
            case 77:/*右键*/
                Dir = RIGHT;                
                break;
            case '2':
            case 80:/*向下键盘键 */
                Dir = DOWN;                
                break;
            case 'x':
            case 27:/*ESE*/
                gameOver = true;
                break;           
        }
    }
}
void run(void)
{
	int i = 0;
	lastx = masterx[master_len - 1];
	lasty = mastery[master_len - 1];
	for(i = master_len - 1; i > 0; i--)
	{
		masterx[i] = masterx[i-1];
		mastery[i] = mastery[i-1];
	}
	switch(Dir)
	{
		case LEFT: 			
			masterx[0] = masterx[1];
			mastery[0] = mastery[1]-1;
			break;
		case RIGHT:
			masterx[0] = masterx[1];
			mastery[0] = mastery[1]+1;
			break;
		case UP: 
			masterx[0] = masterx[1]-1;
			mastery[0] = mastery[1];
			break;
		case DOWN: 
			masterx[0] = masterx[1]+1;
			mastery[0] = mastery[1];
			break;
	}	
}
int logic(void)
{
	if(masterx[0] == 0 || masterx[0] == 26 || mastery[0] == 0 || mastery[0] == 51)
	{
		return 0;//游戏结束
	}
	if(masterx[0] == targetx && mastery[0] == targety)//吃到食物
	{
		master_len += 1;
		masterx[master_len - 1] = lastx ;//保留的上一次的最后一个位置,因为吃到食物要增加一个长度的元素
		mastery[master_len - 1] = lasty;
		socres++;
		return 1;
	}
	return 2;
}


基本功能都有了,主要看下思路,虽然和简陋。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以帮你一个贪吃蛇的C语言代码。下面是一个简单的贪吃蛇的示例代码: ```c #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> #define WIDTH 20 #define HEIGHT 20 #define UP 'w' #define DOWN 's' #define LEFT 'a' #define RIGHT 'd' int score = 0; int gameover = 0; int headX, headY; int fruitX, fruitY; int tailX[100], tailY[100]; int nTail = 0; enum eDirecton { STOP = 0, LEFT, RIGHT, UP, DOWN }; enum eDirecton dir; void Setup() { gameover = 0; dir = STOP; headX = WIDTH / 2; headY = HEIGHT / 2; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; score = 0; } void Draw() { system("cls"); for (int i = 0; i < WIDTH + 2; i++) printf("#"); printf("\n"); for (int i = 0; i < HEIGHT; i++) { for (int j = 0; j < WIDTH; j++) { if (j == 0) printf("#"); if (i == headY && j == headX) printf("O"); else if (i == fruitY && j == fruitX) printf("F"); else { int printTail = 0; for (int k = 0; k < nTail; k++) { if (tailX[k] == j && tailY[k] == i) { printTail = 1; break; } } if (printTail) printf("o"); else printf(" "); } if (j == WIDTH - 1) printf("#"); } printf("\n"); } for (int i = 0; i < WIDTH + 2; i++) printf("#"); printf("\n"); printf("Score: %d", score); } void Input() { if (_kbhit()) { switch (_getch()) { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': gameover = 1; break; } } } void Logic() { int prevX = tailX[0]; int prevY = tailY[0]; int prev2X, prev2Y; tailX[0] = headX; tailY[0] = headY; for (int i = 1; i < nTail; i++) { prev2X = tailX[i]; prev2Y = tailY[i]; tailX[i] = prevX; tailY[i] = prevY; prevX = prev2X; prevY = prev2Y; } switch (dir) { case LEFT: headX--; break; case RIGHT: headX++; break; case UP: headY--; break; case DOWN: headY++; break; } if (headX >= WIDTH) headX = 0; else if (headX < 0) headX = WIDTH - 1; if (headY >= HEIGHT) headY = 0; else if (headY < 0) headY = HEIGHT - 1; for (int i = 0; i < nTail; i++) { if (tailX[i] == headX && tailY[i] == headY) { gameover = 1; break; } } if (headX == fruitX && headY == fruitY) { score += 10; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; nTail++; } } int main() { Setup(); while (!gameover) { Draw(); Input(); Logic(); Sleep(10); } return 0; } ``` 这是一个简单的贪吃蛇游戏,使用了C语言编。你可以运行这段代码,并使用WASD控制贪吃蛇移动。每吃掉一个水果,得分会增加10分。当贪吃蛇碰到自己或触碰到边界时,游戏结束。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值