c语言贪吃蛇
思路:函数gotoxy(x,y)使光标移植屏幕的x,y坐标(屏幕左上角为0,0),用来绘制蛇和界面,color()函数用来设置绘制的颜色。设有snakelong节,第i节蛇的x坐标为x[i],y坐标为y[i],以用户设置重新绘制蛇,
根据键盘输入控制蛇头(x[1],y[1])的坐标,然后绘制蛇头,并且擦掉蛇尾(x[snakelong],y[snakelong]),每次更新界面时判断蛇头是否和蛇身相交或者与墙壁相交,如果有则退出循环结束游戏,每次更新界面
判断蛇头是否和苹果(使蛇变长)相交,相交的话snakelong++。并且下次绘制时不擦蛇尾。当苹果被吃掉了,则新随机生成一个苹果,苹果在界面内并且不与蛇相交。
其他积分计算什么的看代码吧。
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <dos.h>
int x[10000];
int y[10000];
int snakelong=3;
int applex,appley;
char c;
int h=25;
int w=50;
int life=0;
int speed;
int go=5; //0:front 1:back 2:left 3:right
int eatapple=1; //0:yes 1:no
int setapple=0; //0:yes 1:no
void color(int b)
{
HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
SetConsoleTextAttribute(hConsole,b) ;
}
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void snakemove(int go)
{
if(eatapple==0)
{
eatapple=1;
setapple=0;
snakelong++;
}
else
{
gotoxy(x[snakelong]+1,y[snakelong]);
printf("\b ");
}
int i;
for(i=snakelong;i>=2;i--)
{
x[i]=x[i-1];
y[i]=y[i-1];
}
if(go==0)
{
y[1]--;
gotoxy(x[1],y[1]);
printf("■");
}
if(go==1)
{
y[1]++;
gotoxy(x[1],y[1]);
printf("■");
}
if(go==2)
{
x[1]=x[1]-2;
gotoxy(x[1],y[1]);
printf("■");
}
if(go==3)
{
x[1]=x[1]+2;
gotoxy(x[1],y[1]);
printf("■");
}
}
void printback(int high,int weight)
{
int i;
for(i=1;i<=weight;i=i+2)
{
gotoxy(i,0);
printf("□");
}
for(i=1;i<=weight;i=i+2)
{
gotoxy(i,high-1);
printf("□");
}
for(i=1;i<=high;i++)
{
gotoxy(0,i-1);
printf("□");
}
for(i=1;i<=high;i++)
{
gotoxy(weight,i-1);
printf("□");
}
gotoxy(w+3,0);
printf("按空格键暂停");
gotoxy(w+3,1);
printf("按wasd控制前后左右与继续");
}
void drawapple()
{
color(14);
int i;
int a=0;
srand(time(0));
while(1)
{
int a=0;
applex=(rand()%((w/2)-1))*2+2;
appley=(rand()%(h-2))+1;
for(i=1;i<=snakelong;i++)if(applex!=x[i]||appley!=y[i]) a++;
if(a==snakelong) break;
}
gotoxy(applex,appley);
printf("★");
setapple=1;
color(10);
}
int main()
{
system("chcp 936>NUL");//设置编码为UNICODE
SetConsoleTitle("贪吃蛇 by 软剑攻城狮");
printf("请输入速度等级(1-10),等级越高速度越快,按回车确认:");
scanf("%d",&speed);
if(speed<1||speed>10)
{
printf("输入错误,按任意键退出!");
getch();
exit(0);
}
x[1]=10;
y[1]=10;
int i;
gotoxy(0,0);
for(i=1;i<=1000;i++)printf(" ");
color(12);
printback(h,w);
color(10);
gotoxy(x[1],y[1]);
printf("■");
while(life==0)
{
if(kbhit())
{
c=getch();
if(c=='w'&&go!=1) go=0;
if(c=='s'&&go!=0) go=1;
if(c=='a'&&go!=3) go=2;
if(c=='d'&&go!=2) go=3;
if(c==' ') go=5;
}
for(i=2;i<=snakelong;i++)
if(x[1]==x[i]&&y[1]==y[i])
{
life=1;
break;
}
if(life==1) break;
if(x[1]<=0||x[1]>=w||y[1]<=0||y[1]>=h-1) break;
if(x[1]==applex&&y[1]==appley)
{
eatapple=0;
Beep(2000,50);
}
if(go!=5) snakemove(go);
if(setapple==0) drawapple();
gotoxy(w+3,3);
printf("分数:%d",(snakelong-3)*10);
Sleep(250-speed*20);
}
Beep(350,200);
Beep(250,200);
gotoxy(0,h+1);
printf("你的蛇死了,按任意键退出游戏");
getch();
return 0;
}
随意转载,没有版权~(要转载还是说上是我写的啊!)
c语言贪吃蛇的更多相关文章
- c语言贪吃蛇详解3.让蛇动起来
c语言贪吃蛇详解3.让蛇动起来 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 上次 ...
- c语言贪吃蛇详解-2.画出蛇
c语言贪吃蛇详解-2.画出蛇 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 蛇的身 ...
- c语言贪吃蛇详解1.画出地图
c语言贪吃蛇详解-1.画出地图 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 首先 ...
- c语言贪吃蛇详解5.GameOver功能与显示成绩
c语言贪吃蛇详解5.GameOver功能与显示成绩 以前我们已经做出来了一个能吃东西变长的蛇.不过它好像不会死... 现在就来实现一下game over的功能吧. 写个函数判断蛇是否撞到自己或者撞到墙 ...
- c语言贪吃蛇详解4.食物的投放与蛇的变长
c语言贪吃蛇详解4.食物的投放与蛇的变长 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识 ...
- 程序游戏推荐(C语言贪吃蛇,python天天酷跑(需要安装pygame),js是狠人就坚持30s)
下面是下载位置,我把他们上传到我的文件下了. C语言贪吃蛇:https://files.cnblogs.com/files/ITXiaoAng/%E8%B4%AA%E5%90%83%E8%9B%87. ...
- C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!
接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...
- C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!
前几天有个同学加我QQ私聊我说他们老师布置了一个贪吃蛇,他不知道怎么写所以来找我求解,我给他简单讲解了思路和一些难点之后他也能够自己独立将项目完成了!考虑到更多同学可能有贪吃蛇上的问题,今天有时间就来 ...
- [C语言]贪吃蛇_结构数组实现
一.设计思路 蛇身本质上就是个结构数组,数组里存储了坐标x.y的值,再通过一个循环把它打印出来,蛇的移动则是不断地刷新重新打印.所以撞墙.咬到自己只是数组x.y值的简单比较. 二.用上的知识点 结构数 ...
随机推荐
- error “base class has incomplete type”
error "base class has incomplete type" 如果base.h是你的基类,那么在子类derive中,写成如下形式: class base; clas ...
- 考试宝典-真题园安卓AppV2.1.0新版发布啦,全新界面,全新体验,全面适配Android 5.0&6.0系统!
真题园移动客户端是真题园网 http://www.zhentiyuan.com 旗下的一款学习考试应用App. 1.全新适配Android5.0.6.0系统,重新优化架构网络通信模块. 2.全新清爽U ...
- MySQL(5):数据表操作
表名的前缀: 两个student表,为了区分相同逻辑表名的不同应用,给逻辑表名,增加前缀 //学生管理 create table info_student ( name varchar(20), st ...
- 学习strcat与strcpy
前几天刚有点认识了strlen和sizeof,今天又有点认识了strcpy和strcat. 在vc2010环境下 1 strcpy strcpy(p,q),p要么为数组,要么为空指针,要是为空指针操作 ...
- AndroidStudio中安装可自动生成json实体类的jar包
第一步:安装gsonjar包, 这样gson包就下载好了.接下来安装能自动生成实体类的插件: 接下来不要忘了重启: 重启后,就可以通过自定义的快捷键 alt+shift+s来打开generate,从而 ...
- Android_SeekBar
xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- Android Partitions Explained: boot, system, recovery, data, cache & misc
from: http://www.addictivetips.com/mobile/android-partitions-explained-boot-system-recovery-data-cac ...
- ubuntu nexus 安装
今天公司组织学习使用linux系统搭建nexus maven私服中央仓库,在公司使用centos搭建了一个,回家又用ubuntu搭建一个,主要是为了能熟悉整个流程,现将主要过程总结如下:(PS:楼主是 ...
- C语言---注释
1.单行注释 //注释内容 2.多行注释 /*注释内容*/ 3.#if 0 注释内容 #endif 说明: 1.单行注释//不通用,有些编译器不支持 2.多行注释不能嵌套 3.#if 0 #endif ...
- Vim 的补全模式加速器,轻松玩转全部 15 种自动补全模式
1. 关于 Vim 补全模式 ---- Vim 一共提供了 15 种自动补全的模式(:help ins-completion).其中有两种的补全列表内容与另外两种相同,只是排序不同,这 15 种 ...