【教育培训商业源码】【总裁迪正版源码】【座位共享系统源码】贪吃蛇c语言源码_贪吃蛇c语言源代码
1.贪吃蛇c语言源代码
2.å¦ä½ç¨Cè¯è¨åè´ªåè
3.求用c语言编写的贪吃贪吃贪吃蛇程序
4.ç¨cè¯è¨åè´ªåè
5.c语言贪吃蛇代码
贪吃蛇c语言源代码
下面是一个简单的贪吃蛇游戏的C语言实现框架,不包含完整的蛇c蛇图形界面,但展示了游戏逻辑的语言源码语言源代基本结构。此示例使用控制台字符来模拟蛇的贪吃贪吃移动和食物的生成。请注意,蛇c蛇这只是语言源码语言源代教育培训商业源码一个概念性的实现,实际应用中可能需要借助图形库(如SDL、贪吃贪吃OpenGL或Windows API)来创建图形界面。蛇c蛇
```c
#include
#include
#include // 注意:_kbhit() 和 _getch() 是语言源码语言源代特定于某些编译环境的
// 假设的蛇身和地图大小
#define SIZE
int x, y, fruitX, fruitY, score;
int tailX[], tailY[];
int nTail;
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
enum eDirection dir;
void Setup() {
// 初始化代码
dir = STOP;
x = SIZE / 2;
y = SIZE / 2;
fruitX = rand() % SIZE;
fruitY = rand() % SIZE;
score = 0;
}
void Draw() {
// 绘制游戏界面,此处省略
// 使用循环打印蛇身和食物位置
}
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;
}
}
}
void Logic() {
// 移动逻辑,贪吃贪吃碰撞检测等
// 此处省略
}
int main() {
Setup();
while (1) {
Draw();
Input();
Logic();
// 延时
Sleep();
}
return 0;
}
```
注意:`_kbhit()` 和 `_getch()` 是蛇c蛇特定于某些编译环境(如Microsoft Visual Studio)的函数,用于检测键盘输入。语言源码语言源代在其他环境中,贪吃贪吃可能需要使用不同的蛇c蛇方法来实现输入处理。此外,语言源码语言源代由于篇幅限制,此代码省略了具体的绘制和逻辑实现细节。
å¦ä½ç¨Cè¯è¨åè´ªåè
#include<conio.h> #include<graphics.h> #include<time.h> #include<string.h> #include<malloc.h> #include<stdio.h> int grade=5,point=0,life=3; void set(),menu(),move_head(),move_body(),move(),init_insect(),left(),upon(),right(),down(),init_graph(),food_f(),ahead(),crate(); struct bug { int x; int y; struct bug *last; struct bug *next; }; struct fd { int x; int y; int judge; }food={ 0,0,0}; struct bug *head_f=NULL,*head_l,*p1=NULL,*p2=NULL; void main() { char ch; initgraph(,); set(); init_insect(); while(1) { food_f(); Sleep(grade*); setcolor(BLACK); circle(head_l->x,head_l->y,2); setcolor(WHITE); move_body(); if(kbhit()) { ch=getch(); if(ch==) { ahead(); set(); } else if(ch==-) { switch(getch()) { case :upon();break; case :down();break; case :left();break; case :right();break; } } else ahead(); } else { ahead(); } if(head_f->x==food.x&&head_f->y==food.y) { Sleep(); crate(); food.judge=0; point=point+(6-grade)*; if(food.x<||food.y<||food.x>||food.y>) life++; menu(); } if(head_f->x<5||head_f->x>||head_f->y<5||head_f->y>) { Sleep(); life--; food.judge=0; init_graph(); init_insect(); menu(); } for(p1=head_f->next;p1!=NULL;p1=p1->next) { if(head_f->x==p1->x&&head_f->y==p1->y) { Sleep(); life--; food.judge=0; init_graph(); init_insect(); menu(); break; } } if(life==0) { outtextxy(,,"游æç»æï¼"); getch(); return; } move(); }; } void init_graph() { clearviewport(); setlinestyle(PS_SOLID,1,5); rectangle(2,2,,); setlinestyle(PS_SOLID,1,1); } void set() { init_graph(); outtextxy(,,"1ãå¼å§ / è¿å"); outtextxy(,,"2ãéåº"); outtextxy(,,"3ãé¾åº¦"); outtextxy(,,"4ãéæ°å¼å§"); switch(getch()) { case '1': menu();setcolor(GREEN);circle(food.x,food.y,2);setcolor(WHITE);return; case '2': exit(0);break; case '3': outtextxy(,,"ï¼1 2 3 4 5");grade=getch()-;set();break; case '4': food.judge=0,grade=5;point=0;life=3;init_insect();menu();break; default: outtextxy(,,"è¾å ¥é误ï¼"); set();break; } } void menu() { char str[],str1[]={ "åæ°ï¼"},str2[]={ "é¾åº¦ï¼"},str3[]={ "çå½å¼ï¼"}; init_graph(); sprintf(str,"%d",point); strcat(str1,str); outtextxy(,,str1); sprintf(str,"%d",grade); strcat(str2,str); outtextxy(,,str2); sprintf(str,"%d",life); strcat(str3,str); outtextxy(,,str3); outtextxy(,,"设置ï¼ESC"); } void init_insect() { head_f=(struct bug *)malloc(sizeof(struct bug)); head_f->last=NULL; head_f->x=; head_f->y=; p2=head_f->next=p1=(struct bug *)malloc(sizeof(struct bug)); p1->last=head_f; p1->x=; p1->y=; p1=p1->next=(struct bug *)malloc(sizeof(struct bug)); p1->next=NULL; p1->x=; p1->y=; p1->last=p2; head_l=p1; } void move() { for(p1=head_f;p1!=NULL;p1=p1->next) { circle(p1->x,p1->y,2); } } void move_head() { } void move_body() { for(p1=head_l,p2=p1->last;p2!=NULL;p1=p2,p2=p2->last) { p1->x=p2->x; p1->y=p2->y; } } void ahead() { p1=head_f; p2=p1->next; p2=p2->next; if(p1->x==p2->x) { if(p1->y>p2->y) head_f->y+=5; else head_f->y-=5; } else { if(p1->x>p2->x) { head_f->x+=5; } else head_f->x-=5; } } void upon() { p1=head_f->next; p1=p1->next; head_f->y-=5; if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->y+=5; ahead(); } } void down() { p1=head_f->next; p1=p1->next; head_f->y+=5; if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->y-=5; ahead(); } } void left() { p1=head_f->next; p1=p1->next; head_f->x-=5; if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->x+=5; ahead(); } } void right() { p1=head_f->next; p1=p1->next; head_f->x+=5; if(p1->x==head_f->x&&p1->y==head_f->y) { head_f->x-=5; ahead(); } } void food_f() { if(!food.judge) { food.x=(rand()%+1)*5; food.y=(rand()%+1)*5; food.judge=1; if(food.x<||food.y<||food.x>||food.y>) { setcolor(RED); circle(f
求用c语言编写的贪吃蛇程序
C语言实现的简单贪吃蛇程序以下是一个基本的贪吃蛇程序的C语言代码示例。请注意,总裁迪正版源码这是一个非常简单的实现,主要用于展示贪吃蛇游戏的核心逻辑,界面和更多功能可能需要进一步开发和完善。
c
#include
#include
#include // 用于延时和获取键盘状态
#include // 用于设置颜色和清屏
// 定义蛇的部分结构
typedef struct SnakePart {
int x; // 蛇的横坐标
int y; // 蛇的纵坐标
} SnakePart;
// 定义蛇的结构体,包含头和身体部分列表
typedef struct Snake {
SnakePart head; // 蛇头位置
SnakePart body[]; // 身体部分列表
int direction; // 蛇移动的方向
} Snake;
// 游戏初始化函数
void initGame {
Snake snake = { { , }, { 9, }, { 8, }, 1}; // 初始化蛇的位置和初始方向
// 更多初始化代码... 如设置窗口大小、颜色等。
}
// 游戏主循环函数
void gameLoop {
Snake snake; // 使用全局变量或传入参数方式获取蛇的状态
int key; // 用于捕获按键的变量
while { // 主循环,持续游戏直到退出条件满足
// 更新游戏状态...此处需要根据蛇的状态来更新位置等逻辑。
system; // 清屏命令
// 重绘游戏界面...这里可以根据需要绘制蛇体和食物等。座位共享系统源码
printf; // 输出当前游戏状态作为示例,实际应使用绘图函数来显示游戏画面。
Sleep; // 延时函数,控制游戏速度
key = _getch; // 获取用户按键操作用以控制蛇的移动方向等。
// 根据按键更新蛇的状态...此处需要根据key的值来改变蛇的direction属性。
if break; // 如果按下'q',则退出游戏循环。
}
}
int main {
initGame; // 游戏初始化
gameLoop; // 开始游戏循环
return 0; // 程序结束
}
这是一个非常基础的贪吃蛇游戏框架,具体的前程无忧app源码实现细节需要根据具体需求进行扩展和完善。例如,需要实现蛇的移动逻辑、食物的生成和碰撞检测等。此外,还需要利用图形库或操作系统提供的API来实现游戏界面和用户交互功能。对于真正的游戏开发来说,代码会更复杂并且涉及更多的内容。
ç¨cè¯è¨åè´ªåè
#include
#include
#include
#include /*å¼ç¨çåºå½æ°*/
#define LEFT 0x4b
#define RIGHT 0x4d
#define DOWN 0x
#define UP 0x
#define ESC 0xb/*å®å®ä¹é®å*/
#define N
int i,key;
int level;/*游æç级*/
int score=0;/*å¾å*/
int gamespeed;/*游æé度*/
struct Food
{
int x;/*é£ç©ç横åæ */
int y;/*é£ç©ç纵åæ */
int yes;/*å¤ææ¯å¦è¦åºç°é£ç©çåé*/
}food;/*é£ç©çç»æä½*/
struct Snake
{
int x[N];
int y[N];
int node;/*èçèæ°*/
int direction;/*è移å¨æ¹å*/
int life;/* èççå½,0æ´»ç,1æ»äº¡*/
}snake;/*èçç»æä½*/
void Choicelevle(void);/*éæ©æ¸¸æç级*/
void Init(void);/*å¾å½¢é©±å¨*/
void Close(void);/*å¾å½¢ç»æ*/
void DRAW(void);/*游æåºå*/
void GameOver(void);/*ç»æ游æ*/
void GamePlay(void);/*ç©æ¸¸æå ·ä½è¿ç¨*/
void PrScore(void);/*è¾åºæ绩*/
/*主å½æ°*/
void main(void)
{
Init();/*å¾å½¢é©±å¨*/
Choicelevle();/*éæ©æ¸¸æç级*/
DRAW();/*游æåºå*/
GamePlay();/*ç©æ¸¸æå ·ä½è¿ç¨*/
Close();/*å¾å½¢ç»æ*/
}
/*å¾å½¢é©±å¨*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"\\turboc2"); /*åå§åå¾å½¢ç³»ç»*/
cleardevice(); /*æ¸ é¤å¾å½¢çé¢*/
}
/*éæ©æ¸¸æç级*/
void Choicelevle(void)
{ char name[];setcolor(YELLOW);settextstyle(0,0,6);outtextxy(,,"Snake");setcolor(GREEN);settextstyle(0,0,1);outtextxy(,,"please put in your English name:");outtextxy(,,"Choice levle from 1-9.");outtextxy(,,"name:yangzilong");/*å¶ä½äººå§å*/outtextxy(,,"number:");/*å¶ä½äººå¦å·*/outtextxy(,,"class:computer science ");/*å¶ä½äººç级*/getch();printf("please putin your name:");gets(name);printf("please choice levle:");scanf("%d",&level);gamespeed=-*level-*level*level;if(level>9||level<1){ cleardevice(); /*æ¸ é¤å¾å½¢çé¢*/setcolor(YELLOW); /*设置åä½é¢è²*/settextstyle(0,0,2); /*设置åä½ç±»å*/outtextxy(,,"level input error"); /*æ¾ç¤ºææ¬*/getch();level=1;}
}
void DRAW(void)
{ cleardevice(); /*æ¸ å±*/setcolor(2);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线å*/rectangle(,,,);}
/*ç©æ¸¸æå ·ä½è¿ç¨*/
void GamePlay(void)
{ setcolor(5);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线å*/randomize();/*éæºæ°åçå¨*/food.yes=1;/*1表示éè¦åºç°æ°é£ç©,0表示已ç»åå¨é£ç©*/snake.life=0;/*æ´»ç*/snake.direction=1;/*æ¹åå¾å³*/snake.x[0]=;snake.y[0]=;/*è头*/snake.x[1]=;snake.y[1]=; /*èç第äºèä½ç½®*/snake.node=3;/*èæ°*/PrScore();/*è¾åºå¾å*/while(1)/*å¯ä»¥éå¤ç©æ¸¸æ,åESCé®ç»æ*/{ while(!kbhit())/*å¨æ²¡ææé®çæ åµä¸,èèªå·±ç§»å¨èº«ä½*/{ if(food.yes==1)/*éè¦åºç°æ°é£ç©*/{ food.x=rand()%+;food.y=rand()%+;while(food.x%!=0)/*é£ç©éæºåºç°åå¿ é¡»è®©é£ç©è½å¤å¨æ´æ ¼å ,è¿æ ·æå¯ä»¥è®©èåå°*/food.x++;while(food.y%!=0)food.y++;food.yes=0;/*ç»é¢ä¸æé£ç©äº*/}
if(food.yes==0)/*ç»é¢ä¸æé£ç©äºå°±è¦æ¾ç¤º*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+,food.y-);
}
for(i=snake.node-1;i>0;i--)/*èçæ¯ä¸ªç¯èå¾å移å¨*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示å³,å·¦,ä¸,ä¸å个æ¹å,éè¿è¿ä¸ªæ§å¶æ¥ç§»å¨è头*/
switch(snake.direction)
{
case 1: snake.x[0]+=;break;
case 2: snake.x[0]-=;break;
case 3: snake.y[0]-=;break;
case 4: snake.y[0]+=;break;
}
for(i=3;i<snake.node;i++)/*ä»èç第åèå¼å§å¤ææ¯å¦æå°èªå·±äºï¼å 为è头为两èï¼ç¬¬ä¸èä¸å¯è½æè¿æ¥*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*æ¾ç¤ºå¤±è´¥*/
snake.life=1; /*èæ»*/
break;
}
}
/*å¦æè头碰å°å¢å£ï¼è头ä»å¯¹é¢å¢åºæ¥*/
if(snake.x[0]<)
{ snake.x[0]=;/*å¦æè头è¶è¿å·¦è¾¹ç,åä»å³è¾¹çè¿å ¥*/snake.y[0]=snake.y[0];/*纵åæ ä¸å*/for(i=snake.node-1;i>0;i--){ snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1]; /*èçå ¶ä»èæ°ååæ¨è¿*/}
{
setfillstyle(SOLID_FILL,0); /*设置填å 模å¼åé¢è²ï¼0表示é»è²*/
bar(,,,);/*baræ¯è¡¨ç¤ºå¡«å çèå´çå½æ°*/
}
}
else
if(snake.x[0]>)
{ snake.x[0]=;/*å¦æè头è¶è¿å³è¾¹ç,åè头ä»å·¦è¾¹çè¿å ¥*/snake.y[0]=snake.y[0];/*纵åæ ä¸å*/for(i=snake.node-1;i>0;i--){ snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1]; /*èçå ¶ä»èæ°ååæ¨è¿*/}
{
setfillstyle(SOLID_FILL,0); /*设置填å 模å¼åé¢è²ï¼0表示é»è²*/
bar(,,,);/*baræ¯è¡¨ç¤ºå¡«å çèå´çå½æ°*/
}
}
else
if(snake.y[0]<)
{ snake.y[0]=;/*å¦æè头è¶è¿ä¸è¾¹ç,åä»ä¸è¾¹çè¿å ¥*/snake.x[0]=snake.x[0];/*横åæ ä¸å*/for(i=snake.node-1;i>0;i--){ snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1]; /*èçå ¶ä»èæ°ååæ¨è¿*/}
{
setfillstyle(SOLID_FILL,0); /*设置填å 模å¼åé¢è²ï¼0表示é»è²*/
bar(,,,);/*baræ¯è¡¨ç¤ºå¡«å çèå´çå½æ°*/
}
}
else
if(snake.y[0]>)
{ snake.y[0]=;/*å¦æè头è¶è¿ä¸è¾¹ç,åä»ä¸è¾¹çè¿å ¥*/snake.x[0]=snake.x[0];/*横åæ ä¸å*/for(i=snake.node-1;i>0;i--){ snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1]; /*èçå ¶ä»èæ°ååæ¨è¿*/}
{
setfillstyle(SOLID_FILL,0); /*设置填å 模å¼åé¢è²ï¼0表示é»è²*/
bar(,,,);/*baræ¯è¡¨ç¤ºå¡«å çèå´çå½æ°*/
}
}
if(snake.life==1)/*å¦æèæ»å°±è·³åºå 循ç¯ï¼éæ°å¼å§*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*åå°é£ç©ä»¥å*/
{
setcolor(0);/*æç»é¢ä¸çé£ç©ä¸è¥¿å»æ*/
rectangle(food.x,food.y,food.x+,food.y-); /*ç¨å½å线ååé¢è²ç»ä¸ç©å½¢*/
snake.x[snake.node]=-;snake.y[snake.node]=-;
/*æ°çä¸èå æ¾å¨çä¸è§çä½ç½®,ä¸æ¬¡å¾ªç¯å°±ååä¸èçä½ç½®*/
snake.node++;/*èç身ä½é¿ä¸è*/
food.yes=1;/*ç»é¢ä¸éè¦åºç°æ°çé£ç©*/
score+=; /*æ¯åæä¸é£ç©,å¾åç´¯å å*/
if(score%==0)
{ level++;gamespeed=-*level-*level*level;/*æ¯åæé£ç©æåä¸çº§,é度å å¿«*/PrScore();/*è¾åºæ°å¾å*/setcolor(YELLOW); /*设置åä½é¢è²*/settextstyle(0,0,4); /*设置åä½ç±»å*/outtextxy(,,"LEVEL UP"); /*æ¾ç¤ºææ¬*/if(level==){ level=1,gamespeed=-*level-*level*level;}
delay();
delay();
delay();
delay();
delay();
delay();
delay();
bar(,,,);/*baræ¯è¡¨ç¤ºå¡«å çèå´çå½æ°*/
}
PrScore();/*è¾åºæ°å¾å*/
}
setcolor(4);/*ç»åºè*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+,
snake.y[i]-);
delay(gamespeed); /*æ§å¶æ¸¸æé度*/
setcolor(0);
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+,snake.y[snake.node-1]-);
} /*endwhileï¼ï¼kbhitï¼*/ /*ç¨é»è²å»é¤èççæåä¸è*/
if(snake.life==1)/*å¦æèæ»å°±è·³åºå¾ªç¯*/
break;
key=bioskey(0);/*æ¥æ¶æé®*/
if(key==ESC)/*æESCé®éåº*/
break;
else
if(key==UP&&snake.direction!=4)
/*å¤ææ¯å¦å¾ç¸åçæ¹å移å¨*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/
}
/*游æç»æ*/
void GameOver(void)
{
cleardevice(); /*æ¸ å±*/
PrScore();
setcolor(RED); /*设置åä½é¢è²*/
settextstyle(0,0,4); /*设置åä½ç±»å*/
outtextxy(,,"GAME OVER"); /*æ¾ç¤ºææ¬*/
getch();
}
/*è¾åºæ绩å游æç级*/
void PrScore(void)
{
char str1[];/*设置å符åæ°ç»*/
setfillstyle(SOLID_FILL,0);
bar(,,,); /*å¡«å ç©å½¢æ¡*/
setcolor(6); /*设置ææ¬é¢è²*/
settextstyle(0,0,2); /*设置æ°ç»æ¾ç¤ºä½ç½®*/
sprintf(str1,"score %d level %d",score,level);/*æ¾ç¤ºæ°ç»å 容*/
outtextxy(,,str1);
setcolor(YELLOW); /*设置åä½é¢è²*/
settextstyle(0,0,2); /*设置åä½ç±»å*/
outtextxy(,,"EXIT=ESC ");/*æ¾ç¤ºææ¬*/
}
void Close(void)
{
closegraph();
}
c语言贪吃蛇代码
基本思路:蛇每吃一个食物蛇身子就增加一格,用UP,代还款平台源码 DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define BEG_X 2
#define BEG_Y 1
#define WID
#define HEI
HANDLE hout;
typedef enum { UP, DOWN, LEFT, RIGHT} DIR;
typedef struct Snake_body
{
COORD pos;//蛇身的位置
struct Snake_body *next;//下一个蛇身
struct Snake_body *prev;//前一个蛇身
}SNAKE, *PSNAKE;
PSNAKE head = NULL;//蛇头
PSNAKE tail = NULL;//蛇尾
//画游戏边框的函数
void DrawBorder()
{
int i, j;
COORD pos = { BEG_X, BEG_Y};
for(i = 0; i < HEI; ++i)
{
SetConsoleCursorPosition(hout, pos);
for(j = 0; j < WID; ++j)
{
if(i == 0)//第一行
{
if(j == 0)
printf("┏");
else if(j == WID - 1)
printf("┓");
else
printf("━");
}
else if(i == HEI - 1)//最后一行
{
if(j == 0)
printf("┗");
else if(j == WID - 1)
printf("┛");
else
printf("━");
}
else if(j == 0 || j == WID - 1)//第一列或最后一列
printf("┃");
else
printf(" ");
}
++pos.Y;
}
}
//添加蛇身的函数
void AddBody(COORD pos)
{
PSNAKE pnew = (PSNAKE)calloc(1, sizeof(SNAKE));
pnew->pos = pos;
if(!head)
{
head = tail = pnew;
}
else
{
pnew->next = head;//新创建蛇身的next指向原先的蛇头
head->prev = pnew;//原先的蛇头的prev指向新创建的蛇身
head = pnew;//把新创建的蛇身作为新的蛇头
}
SetConsoleCursorPosition(hout, head->pos);
printf("◎");
}
//蛇身移动的函数
void MoveBody(DIR dir)
{
PSNAKE ptmp;
COORD pos = head->pos;
switch(dir)
{
case UP:
if(head->pos.Y > BEG_Y + 1)
--pos.Y;
else
return;
break;
case DOWN:
if(head->pos.Y < BEG_Y + HEI - 2)
++pos.Y;
else
return;
break;
case LEFT:
if(head->pos.X > BEG_X + 2)
pos.X -= 2;
else
return;
break;
case RIGHT:
if(head->pos.X < BEG_X + (WID - 2) * 2)
pos.X += 2;
else
return;
break;
}
AddBody(pos);//添加了一个新的蛇头
ptmp = tail;//保存当前的蛇尾
tail = tail->prev;
if(tail)
tail->next = NULL;
SetConsoleCursorPosition(hout, ptmp->pos);
printf(" ");
free(ptmp);
}
int main()
{
int ctrl;
DIR dir = RIGHT;//初始蛇的方向是向右的
COORD pos = { BEG_X + 2, BEG_Y + HEI / 2};
system("color 0E");
system("mode con cols= lines=");
hout = GetStdHandle(STD_OUTPUT_HANDLE);
printf(" ------------贪吃蛇的移动------------");
DrawBorder();
//自定义几个蛇的身体
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
pos.X += 2;
AddBody(pos);
//控制蛇的移动
while(ctrl = getch())
{
switch(ctrl)
{
case 'w':
if(dir == DOWN)
continue;
dir = UP;
break;
case 's':
if(dir == UP)
continue;
dir = DOWN;
break;
case 'a':
if(dir == RIGHT)
continue;
dir = LEFT;
break;
case 'd':
if(dir == LEFT)
continue;
dir = RIGHT;
break;
case 'q':
return 0;
}
MoveBody(dir);
}
return 0;
}
扩展资料:
实现逻辑
1,可以设置光标,就能实现制定位置打印制定符号。
2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。
3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。
4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。
5,食物产生的位置判定,不能越界,也不能与蛇身体重合。
6,蛇的转向判定,一条规则,不允许倒退。
7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)
8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。
9,加速减速,设置刷新休眠时间实现。
百度百科-C语言