1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言编写贪吃蛇小游戏

C语言编写贪吃蛇小游戏

时间:2021-10-15 05:44:11

相关推荐

C语言编写贪吃蛇小游戏

**游戏结构**

1.知道怎么控制终端上光标的位置。

#include<stdio.h>#include<stdlib.h>#include<windows.h>int main(intargc,char*argv[]){COORDpos ={};HANDLEhOutput=NULL;pos.X=10;pos.Y=20;hOutput=GetStdHandle(STD_OUTPUT_HANDLE);//获取一个指向特定标准设备的句柄SetConsoleCursorPosition(hOutput,pos);printf("this issnake\n)}

将设置位置功能封装成一个函数

void SetPos(int x, int y){COORD pos = {0};//COORD是WindowsAPI中定义的一种结构,表示一个字符在控制台屏幕上的坐标。pos是一个结构体变量HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出的句柄pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);//获取标准输出上光标的位置}

2:绘制地图

根据上图,代码如下:

void CreateMap(){color(7);int i = 0;//上for (i = 0; i <= 58; i += 2){SetPos(i, 0);printf(WALL);}//下for (i = 0; i <= 58; i += 2){SetPos(i,27);printf(WALL);}//左for (i = 1; i <= 26; i++){SetPos(0,i);printf(WALL);}//右for (i = 1; i <= 26; i++){SetPos(58,i);printf(WALL);}}

3:绘制蛇

这里的蛇用链表保存。所以需要蛇身体节点,以及维护整条蛇的数据结构,另外,蛇的

前进方向我们定义成枚举,我们也一并把游戏的运行状态也定义了。

#define WALL "■"//墙#define FOOD "▲"//蛇的食物#define INIT_X 20//蛇的初始位置#define INIT_Y 10//方向enum Direction{UP = 1,DOWN,LEFT,RIGHT};//游戏状态enum GameStatus{OK,//正常运行NORMAL_END,//正常结束KILL_BY_WALL,//撞墙KILL_BY_SELF//咬到自己};//蛇身节点typedef struct SnakeNode{int x;int y;struct SnakeNode* next;}SnakeNode,*pSnakeNode;typedef struct Snake{pSnakeNode _pSnake;//维护整条蛇的指针pSnakeNode _Food;//维护食物的指针int _TotalScore;//总分int _AddScore;//加分int _SleepTime;//每走一步的睡眠时间enum Direction _Dir;enum GameStatus _Status;}Snake,*pSnake;

初始化蛇

void InitSnake(pSnake ps){color(4);pSnakeNode first = BuyNode();pSnakeNode cur = NULL;int i = 0;first->x = INIT_X;first->y = INIT_Y;for (i = 1; i <= 4; i++){cur = BuyNode();cur->x = first->x + 2;cur->y = first->y;cur->next = first;first = cur;}//绘制蛇while (cur){SetPos(cur->x,cur->y);printf(FOOD);cur = cur->next;}ps ->_pSnake = first;SetPos(30,13);}

4:产生食物

void CreateFood(pSnake ps){pSnakeNode pFood = BuyNode();pSnakeNode cur = ps->_pSnake;pFood->y = rand() % 26 + 1;do{pFood->x = rand() % 55 + 2;} while (pFood->x % 2 !=0);while (cur){if (cur->x == pFood->x && cur->y == pFood->y){CreateFood(ps);return;}cur = cur->next;}ps->_Food = pFood;SetPos(pFood->x,pFood ->y );printf(FOOD);//printf("\n");}

5:封装成一个初始化函数

为了用户的友好,加入了一个启动界面

在这里插入代码片

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。