贪吃蛇的C语⾔实现的傻⽠教程(包含详细解释)贪吃蛇的C语⾔实现(包含详细解释)
参考⽂章
关于贪吃蛇C语⾔的要求介绍
题⽬描述
设计⼀个类似贪吃蛇的游戏,并⽤C语⾔编写程序实现,该程序的功能参照贪吃蛇游戏,主要功能包括:
(1)蛇移动区域的设定,移动控制键的设置。
(2)⾷物的出现位置的随机性。
(3)蛇移动路径的⾃然性,蛇每遇到(吃)⼀个⾷物,蛇⾝会长长,直⾄布满整个移动区域。
(4)蛇头冲出设定的移动区域和蛇⾝体即为“失败”。
2.题⽬要求
(1)按照分析、设计、编码、调试和测试过程完成应⽤程序;
(2)学习并使⽤流程图等⼯具,并在撰写报告中使⽤;
(3)边框、⾷物、蛇头、蛇⾝的构成、蛇头的初始位置、蛇⾝的长度等信息可以⾃⾏安排。
程序预览
完整代码(包含部分测试代码已注释)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <Windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <algorithm>
#include <algorithm>
#include <windows.h>
using namespace std;
#define up 'w'
#define down 's'
#define left 'a'
#define right 'd'
#define stop 'p'
char name[21]= {"user"}; //系统默认名称为user
typedef struct
{
char num[21];
char Name[21];
char garde[21];
} guys;//排⾏榜内容
guys noob[11];//排⾏榜中前⼗名的数据和当前玩家的数据guys nownoob;//当前⽤户的信息
typedef struct
{
int num;
char Name[21];
int garde;
} midguy;//中间储存
typedef struct Snakes
{
int x;
int y;
struct Snakes *next;
} snake;//蛇坐标
snake *head,*tail;
struct Food
{
int x;
int y;
} food;//⾷物坐标
int score = 0;//分数
char click = 1;//是否按下键
int speed;//控制蛇的速度
void gotoxy(int x, int y)
{
COORD pos;
HANDLE handle;
pos.X = x;
pos.Y = y;
handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(handle, pos);
}//控制光标位置
void print(int x, int y)
{
gotoxy(x, y);
printf("■");
}//打印数据
void clearprint(int x, int y)
{
{
gotoxy(x, y);
printf(" ");
}//使⽤覆盖的⽅式删除
void creatfood()
{
srand((unsigned)time(NULL));//设置随机数
loop:
food.y = rand() % (25) + 1;
food.x = rand() % (54 - 1) + 2;
if (food.x % 2 != 0)
{
food.x++;
}
snake *bodys = head;
while (1) //遍历排除蛇⾝重复
{
c语言游戏贪吃蛇源码if (bodys->next == NULL)
break;
if (food.x == bodys->x&&food.y == bodys->y)
{
goto loop;
}//如果⾷物⽣成在蛇的⾝上就重新⽣成⼀个⾷物。
bodys = bodys->next;
}
gotoxy(food.x, food.y);
printf("★");
}
int welcome()
{
printf("**************************************************************************************************************\n"); printf("**************************************************************************************************************\n"); printf(" 贪吃蛇\n");
printf("**************************************************************************************************************\n"); printf("**************************************************************************************************************\n"); printf("**************************************************************************************************************\n"); printf("**************************************************************************************************************\n"); printf(" 作者:计机国际张伟\n");
printf(" 学号: 201825110118\n");
printf("**************************************************************************************************************\n"); printf("**************************************************************************************************************\n"); printf("************************************************ 操作选项 *********************************************\n"); printf("************************************************ 1.输⼊⽤户名 *********************************************\n"); printf("************************************************ 2.排⾏榜 *********************************************\n"); printf("************************************************ 3.开始游戏 *********************************************\n"); printf("************************************************ 4.游戏说明 *********************************************\n"); printf("************************************************ 5.退出游戏 *********************************************\n"); printf("**************************************************************************************************************\n"); return 1 ;
}
int hitchat()//碰撞检查
{
if (head->x == 0|| head->x == 56 || head->y == 0 || head->y == 26)
{
welcome();
return 0;
}//如果碰到墙壁就返回;
snake *p = head->next;//从⾝体第⼆节开始遍历,判断是否撞到⾃⼰
while (1)
{
if (p->next == NULL)
break;//没撞到
if (head->x == p->x&&head->y == p->y)
{
welcome();
return 0;//撞到
}//撞到⾃⼰
p = p->next;
}
return 1;
}
void changebody(int a,int b)//让蛇⾝体往头的⽅向移动⼀步{
snake *p = head->next;
int temp1, temp2,_temp1,_temp2;
temp1 = p->x;
temp2 = p->y;
while (1)//遍历将⾝体往前挪⼀格
{
if (p->next->next == NULL)
break;
_temp1 = p->next->x;
_temp2 = p->next->y;
p->next->x = temp1;
p->next->y = temp2;
temp1 = _temp1;
temp2 = _temp2;
p = p->next;
}
p = head->next;
//if (p->next!= NULL)
{
p->x = a;
p->y = b;
}
}
void movebody()
{
int coutnumber = 0;
int a = head->x, b = head->y;
snake *p = head;
//通过先清空后打印实现动画效果
while (1)
{
if (p->next == NULL)
break;
clearprint(p->x, p->y);
coutnumber++;//⽤于计数,然后调整速度
p = p->next;
}
switch (click)
{
case up:
head->y -= 1;//改变头的位置
changebody(a,b);//改变⾝体的位置
break;
case down:
head->y += 1;
changebody(a,b);
break;
case left:
head->x -= 2;
changebody(a,b);
break;
case right:
head->x += 2;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论