c语言贪吃蛇游戏代码程序能运行(跪求贪吃蛇C语言程序,要确保可以运行的,在300行左右,谢谢大神,)
本文目录
跪求贪吃蛇C语言程序,要确保可以运行的,在300行左右,谢谢大神,
共俩个文件,一个game.h的头文件, 一个main.c的主程序文件
//////////////game.h文件
#ifndef _SNAKE_H_H_H
#define _SNAKE_H_H_H
//调节游戏界面大小,这里设置为15*15
int c***t COL = 15; /**c***t 修饰的值具有不可变性**/
int c***t ROW = 15;
//蛇节点
typedef struct Node
{
int x;
int y;
struct Node *pre;
struct Node *next;
}NODE, *pNODE;
//食物
typedef struct Food
{
int x;
int y;
char c;
}FOOD, *pFOOD;
//初始化,创建蛇的第一节
pNODE InitSnake(void);
//初始化食物成员
FOOD InitFood(void);
//蛇运动函数
int MoveSnake(pNODE pHead, char c);
//检查键盘按键
char KbHit(char orient);
//蛇吃到食物处理函数
pNODE SnakeEatFood(pNODE pHead, pFOOD pFood);
//打印游戏界面函数
void Print(pNODE pHead, FOOD food);
//游戏结束,释放内存函数
void FreeMemory(pNODE *ppHead);
#endif
//////////main.c文件
#include 《stdio.h》
#include 《stdlib.h》
#include 《time.h》
#include 《conio.h》
#include 《Windows.h》
#include "game.h"
//主函数
int main(void)
{
char orien = ’a’, get_char;
int game_over = 0;
FOOD food = InitFood(); /**初始化食物**/
pNODE head = InitSnake(); /**初始化头节点*/
while (1)
{
head = SnakeEatFood(head, &food);
get_char = KbHit(orien);
if (27 == get_char)
{
game_over = 1;
break;
}
else
orien = get_char;
game_over = MoveSnake(head, orien);
if (game_over)
break;
system("cls");
Print(head, food);
Sleep(200); //ms级,刷屏间隔时间
}
if (game_over)
{
printf("游戏结束!\n");
FreeMemory(&head);
if (NULL == head)
printf("内存释放成功!\n");
else
printf("内存释放失败!\n");
}
getch();
return 0;
}
//初始化,创建蛇的第一节
pNODE InitSnake(void)
{
pNODE pHead = (pNODE)malloc(sizeof(NODE));
srand((unsigned)(time(NULL)+1));
if (NULL == pHead)
{
printf("内存分配失败!\n");
exit(-1);
}
pHead-》x = rand() % ROW;
pHead-》y = rand() % COL;
pHead-》next = NULL;
pHead-》pre = NULL;
return pHead;
}
//初始化食物成员
FOOD InitFood(void)
{
FOOD food;
srand((unsigned)time(NULL));
food.x = rand() % ROW;
food.y = rand() % COL;
food.c = 65 + rand()%26;
return food;
}
//蛇吃到食物处理函数
pNODE SnakeEatFood(pNODE pHead, pFOOD pFood)
{
pNODE p_add = NULL, pt = NULL, rear = NULL;
if (pFood-》x == pHead-》x && pFood-》y == pHead-》y)
{
p_add = (pNODE)malloc(sizeof(NODE));
if (NULL == p_add)
{
printf("内存分配失败!\n");
exit(-1);
}
pt = pHead;
while (pt-》next != NULL)
{
pt = pt-》next;
}
p_add-》pre = pt;
p_add-》next = NULL;
pt-》next = p_add;
*pFood = InitFood();
//不让食物出现在蛇的位置上
pt = pHead;
while (pt != NULL)
{
if (pFood-》x == pHead-》x && pFood-》y == pHead-》y)
{
*pFood = InitFood();
break;
}
pt = pt-》next;
}
}
return pHead;
}
//检查键盘按键
char KbHit(char orient)
{
char c;
if (kbhit())
{
c = getch();
if (orient != ’d’ && c == ’a’)
{
orient = c;
}
else if (orient != ’a’ && c == ’d’)
{
orient = c;
}
else if (orient != ’w’ && c == ’s’)
{
orient = c;
}
else if (orient != ’s’ && c == ’w’)
{
orient = c;
}
else if (27 == c)
{
orient = c;
}
}
return orient;
}
//蛇运动函数
int MoveSnake(pNODE pHead, char c)
{
INT game_over = 0;
pNODE pt = pHead;
//让pt指向蛇尾
while (pt-》next != NULL)
{
pt = pt-》next;
}
//从蛇尾向向蛇头前进
while(pt != pHead)
{
pt-》x = pt-》pre-》x;
pt-》y = pt-》pre-》y;
pt = pt-》pre;
}
if (’d’ == c)
{
pHead-》x += 1;
if (pHead-》x 》= ROW)
{
pHead-》x -= ROW;
}
}
if (’a’ == c)
{
pHead-》x -= 1;
if (pHead-》x 《 0)
{
pHead-》x += ROW;
}
}
if (’s’ == c)
{
pHead-》y += 1;
if (pHead-》y 》= COL)
{
pHead-》y -= COL;
}
}
if (’w’ == c)
{
pHead-》y -= 1;
if (pHead-》y 《 0)
{
pHead-》y += COL;
}
}
//当蛇头碰到蛇身,游戏结束
pt = pHead-》next;
while (pt != NULL)
{
if (pt-》x == pHead-》x && pt-》y == pHead-》y)
{
game_over = 1;
}
pt = pt-》next;
}
return game_over;
}
//打印游戏界面函数
void Print(pNODE pHead, FOOD food)
{
int row = 0, col = 0, flag = 0;
pNODE pt = NULL;
printf(" 方向控制——上:w 下:s 左:a 右:d(Esc退出)\n ");
for (row=0; row《ROW; row++)
{
printf("—");
}
putchar(’\n’);
for (col=0; col《COL; col++)
{
printf(" |");
for (row=0; row《ROW; row++)
{
pt = pHead;
flag = 0;
//打印出蛇
while (pt != NULL)
{
if (row == pt-》x && col == pt-》y)
{
if (pt == pHead)
printf("■");
else
printf("□");
flag = 1;
break;
}
pt = pt-》next;
}
//打印出食物或两个空格
if (0 == flag)
{
if (row == food.x && col == food.y)
{
putchar(food.c);
putchar(food.c);
continue;
}
printf(" ");
}
}
printf("|");
putchar(’\n’);
}
printf(" ");
for (row=0; row《ROW; row++)
{
printf("—");
}
putchar(’\n’);
}
//释放内存函数
void FreeMemory(pNODE *ppHead)
{
pNODE p_delete = NULL, pt = NULL;
while (*ppHead != NULL)
{
pt = (*ppHead)-》next;
if (pt != NULL)
{
pt-》pre = NULL;
}
p_delete = *ppHead;
****(p_delete);
p_delete = NULL;
*ppHead = pt;
}
}
求c语言的贪吃蛇的代码 能运行的
// C***oleApplication1.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include 《stdio.h》
#include 《windows.h》
#include 《time.h》
#include 《conio.h》
#define frame_height 20 //define map size
#define frame_width 40
#define UP ’w’ //define operate key
#define DOWN ’s’
#define LEFT ’a’
#define RIGHT ’d’
int i, j, k;
char ch = UP; //initial direction
int grow = 0; //flag: if snake grow
struct Food {
int x;
int y;
}food;
struct Snake {
int x;
int y;
int len;
int speed;
}snake; //snake is head
void init_map(void);
void update_food(void);
void move_snake(void);
int is_alive(void);
void get_speed(void);
void gotoxy(int x, int y);
int main()
{
init_map(); //初始化地图
while (1)
{
update_food();
//是否产生食物
get_speed(); //获取速度
move_snake(); //移动蛇身
Sleep(snake.speed);
//移动速度
if (!(is_alive()))
//蛇的死活(撞墙或自食)
break;
}
printf("Game Over!");
_getch();
return 0;
}
//initialize
void init_map(void)
{
//initial food
srand(time(NULL));
food.x = rand() % (frame_height - 2) + 1;
food.y = rand() % (frame_width - 2) + 1;
gotoxy(food.x, food.y);
printf("!");
//initial snake
snake.x = frame_height / 2;
snake.y = frame_width / 2;
gotoxy(snake.x);
printf("@");
snake.len = 3;
snake.speed = 200;
for (k = 1; k《snake.len; k++)
{
snake.x + 1;
snake.y;
gotoxy(snake.x);
printf("@");
}
//initial bar
for (j = 0; j《frame_width; j++)
{
gotoxy(0, j);
printf("#");
gotoxy(frame_height - 1, j);
printf("#");
}
for (i = 1; i《frame_height - 1; i++)
{
gotoxy(i, 0);
printf("#");
gotoxy(i, frame_width - 1);
printf("#");
}
}
//generate food
void update_food()
{
if (snake.x == food.y)
{
srand(time(NULL));
food.x = rand() % (frame_height - 2) + 1;
food.y = rand() % (frame_width - 2) + 1;
gotoxy(food.x, food.y);
printf("!");
snake.len++;
grow = 1;
}
}
//move snake
void move_snake()
{
if (_kbhit())
ch = _getch();
if (!grow)
{
gotoxy(snake.x);
printf(" ");
}
for (k = snake.len - 1; k》0; k--)
{
snake.x;
snake.y;
}
switch (ch)
{
case UP: snake.x--; break;
case DOWN: snake.x++; break;
case LEFT: snake.y--; break;
case RIGHT: snake.y++; break;
default: break;
}
gotoxy(snake.x);
printf("@");
grow = 0;
gotoxy(frame_height, 0);
}
//is alive
int is_alive(void)
{
if (snake.x == 0)
return 0;
for (k = 1; k《snake.len; k++)
if (snake.x)
return 0;
return 1;
}
//speed up
void get_speed(void)
{
if (snake.len 《= 6)
snake.speed = 200;
else if (snake.len 《= 10)
snake.speed = 100;
else if (snake.len 《= 20)
snake.speed = 50;
else if (snake.len 《= 30)
snake.speed = 30;
else snake.speed = 20;
}
//move cursor
void gotoxy(int x, int y)
{
HANDLE hout;
COORD cor;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
cor.X = y;
cor.Y = x;
SetC***oleCursorPosition(hout, cor);
}
求一个c语言贪吃蛇代码 能在cb下运行
#include《graphics.h》
#include《conio.h》
#include《dos.h》
#include《bios.h》
#include《stdlib.h》
#define STATIC 0
#define TRUE 1
#define FALSE 0
#define UP 1
#define RIGHT 2
#define DOWN 3
#define LEFT 4
#define VK_LEFT 0x4b00 /*上下左右键的值*/
#define VK_RIGHT 0x4d00
#define VK_DOWN 0x5000
#define VK_UP 0x4800
#define VK_ESC 0x011b
int board;
int snakelength=0;
struct snake{
public:
int x=0;
int y=0;
int direction;
}body;
snake food;
void makefood();/*产生一个食物*/
int eatfood(); /*蛇吃掉食物*/
void right(); /*上下左右的函数了*/
void down();
void left();
void up();
void getdirection(); /*判断蛇的方向*/
move(snake *body)/*让蛇动起来*/
{int x=body.y;
if(body-》direction==RIGHT&&board!=1)right();
elseif(body-》direction==DOWN&&board!=1)down();
elseif(body-》direction==LEFT&&board!=1)left();
elseif(body-》direction==UP&&board!=1)up();
return 0;
}
void print() /*在屏幕上显示蛇*/
{int i,j,x=0,y=0;
for(i=1;i《21;i++)
for(j=1;j《21;j++)
board=0;
for(i=0;i《20;i++)
{x=body.x;
y=body.y;
board=1;
}
board=2;
for(i=1;i《21;i++)
for(j=1;j《21;j++)
{if(board==1)
{setfillstyle(SOLID_FILL,WHITE);
bar(j*15,i*15,j*15+13,i*15+13);
}
if(board==0)
{setfillstyle(SOLID_FILL,BLACK);
bar(j*15,i*15,j*15+13,i*15+13);
}
if(board==2)
{setfillstyle(SOLID_FILL,RED);
bar(j*15,i*15,j*15+13,i*15+13);
}
}
}
main(int second=0)
{
int gdriver=CGAC0,gmode;
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");/*BGI文件夹的路径,我的是c:\tc\bgi,这里得自己改下*/
randomize();
int i,j;
int flag;
longtime=100000;
for(i=0;i《21;i++)
for(j=0;j《21;j++)
board=0;
for(i=0;i《22;i++)
{board=1;}
snakelength=3;
body.direction=RIGHT;
body.y=2;
body.y=2;
makefood();
print();
getch();
for(i=0;i《30000;i++)
{
move(&body);
getdirection();
flag=eatfood();
if(flag==TRUE){print();makefood();};
print();
for(j=0;j《second;j++)delay(200);
}
line(0,0,400,400);
getch();
}
void right()
{int i;
for(i=snakelength-1;i》0;i--)
{body.x;
body.y;
}
body.x++;
}
void down()
{int i;
for(i=snakelength-1;i》0;i--)
{body.x;
body.y;
}
body.y++;
}
void left()
{int i;
for(i=snakelength-1;i》0;i--)
{body.x;
body.y;
}
body.x--;
}
void up()
{int i;
for(i=snakelength-1;i》0;i--)
{body.x;
body.y;
}
body.y--;
}
void getdirection()
{int key=0;
if(bioskey(1)!=0)
key=bioskey(0);
switch(key)
{case VK_UP: if(body.direction=UP;break;
caseVK_RIGHT: if(body.direction=RIGHT;break;
caseVK_DOWN: if(body.direction=DOWN;break;
caseVK_LEFT: if(body.direction=LEFT;break;
case VK_ESC:exit(0);
}
}
void makefood()
{int i,j;
food.x=0;
food.y=0;
print();
food.x=random(20);
food.y=random(20);
for(;;)
{if(board!=0)
{
food.x=random(20);
food.y=random(20);
}
else break;
}
food.direction=body.direction;
board=2;
}
int eatfood()
{int i=FALSE;
intx=body.y;
if(body==2)
{snakelength++;
for(i=snakelength-1;i》0;i--){body.y;}
body.x=food.x;
body.y=food.y;
food.x=0;
food.y=0;
i=TRUE;
}
if(body==2)
{ snakelength++;
for(i=snakelength-1;i》0;i--){body.y;}
body.x=food.x;
body.y=food.y;
food.x=0;
food.y=0;
i=TRUE;
}
if(body==2)
{snakelength++;
for(i=snakelength-1;i》0;i--){body.y;}
body.x=food.x;
body.y=food.y;
food.x=0;
food.y=0;
i=TRUE;
}
if(body==2)
{snakelength++;
for(i=snakelength-1;i》0;i--){body.y;}
body.x=food.x;
body.y=food.y;
food.x=0;
food.y=0;
i=TRUE;
}
return i;
}
更多文章:
springcloud各组件详解(18.SpringCloud有哪些组件)
2026年3月30日 10:40
数据结构课程设计通讯录管理系统(数据结构课程设计,通讯录管理系统)
2026年3月30日 10:20
ajax实时刷新页面(AJAX如何做到点击发送能刷新整个页面)
2026年3月30日 10:00
c语言贪吃蛇游戏代码程序能运行(跪求贪吃蛇C语言程序,要确保可以运行的,在300行左右,谢谢大神,)
2026年3月30日 09:40
手机版android开发软件(androidapp用什么开发好(安卓用什么开发))
2026年3月30日 09:00
javasubstring截取字符串(java中如何截取字符串中的指定一部分)
2026年3月30日 08:40
u4f60转中文(\u6211\u559c\u6622\u4f60\u554a什么意思)
2026年3月30日 08:20





