资源简介
使用C语言编写贪吃蛇程序,实现计分,选择游戏难度等功能,用键盘方向键操作。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#define MAXWIDTH 30
#define MAXHEIGHT 30
int xCenter = MAXHEIGHT%2==0 ? MAXHEIGHT/2 : MAXHEIGHT/2+1;
int yCenter = MAXWIDTH%2==0 ? MAXWIDTH/2 : MAXWIDTH/2+1;
int callspeed;
//程序中用到的各种字符,以及它们的颜色和类型(以数字表示)
struct{
char *ch;
int color;
char type;}
charBorder = {“□“ 4 1} //边框
charBg = {“■“ 2 2} //背景
charSnake = {“★“ 0xe 3} //贪吃蛇节点
charFood = {“●“ 0xc 4}; //食物
//用一个结构体数组保存地图中的各个点
struct{
char type;
int index;}
globalMap[MAXWIDTH][MAXHEIGHT];
//贪吃蛇有效活动范围地图的索引
struct{
int x;
int y;
} snakeMap[ (MAXWIDTH-2)*(MAXHEIGHT-2) ] scoresPostion;
int scores = 0; //得分
int snakeMapLen = (MAXWIDTH-2)*(MAXHEIGHT-2);
int headerIndex tailIndex; //蛇头蛇尾对应的snakeMap中的索引(下标)
HANDLE hStdin; //控制台句柄
void setPosition(int x int y){// 设置光标位置,x为行,y为列
COORD coord;
coord.X = 2*y;
coord.Y = x;
SetConsoleCursorPosition(hStdin coord);}
void setColor(int color){// 设置颜色
SetConsoleTextAttribute(hStdin color);}
void createFood(){//创建食物
int index rang x y;
//产生随机数,确定 snakeMap 数组的索引
srand((unsigned)time(NULL));
if(tailIndex rang = headerIndex-tailIndex-1;
index = rand()%rang + tailIndex + 1;
}else{
rang = snakeMapLen - (tailIndex - headerIndex+1);
index = rand()%rang;
if(index>=headerIndex){
index += (tailIndex-headerIndex+1);
if(index>28*28){index=tailIndex+1;}
}
}
x = snakeMap[index].x;
y = snakeMap[index].y;
setPosition(x y);
setColor(charFood.color);
printf(“%s“ charFood.ch);
globalMap[x][y].type=charFood.type;
}
//死掉
void die(){
setPosition(xCenter yCenter-5);
setColor(0xC);
printf(“You die! Game Over!“);
setPosition(xCenter+1 yCenter-5);
setColor(0xC);
getch();
exit(0);
}
// 蛇移动
void move(char direction){
int newHeaderX newHeaderY; //新蛇头的坐标
int newHeaderPreIndex; //新蛇头坐标以前对应的索引
int newHeaderPreX newHeaderPreY; //新蛇头的索引以前对应的坐标
int newHeaderPreType; //新蛇头以前的类型
int oldTailX oldTailY; //老蛇尾坐标
//新蛇头的坐标
switch(direction){
case ‘w‘:newHeaderX = snakeMap[headerIndex].x-1;newHeaderY = snakeMap[headerIndex].y;break;
case ‘s‘:newHeaderX = snakeMap[headerIndex].x+1;newHeaderY = snakeMap[headerIndex].y;break;
case ‘a‘:newHeaderX = snakeMap[headerIndex].x;newHeaderY = snakeMap[headerIndex].y-1;break;
case ‘d‘:newHeaderX = snakeMap[headerIndex].x;newHeaderY = snakeMap[headerIndex].y+1;break;}
headerIndex = headerIndex==0 ? snakeMapLen-1 : headerIndex-1; //新蛇头的索引
newHeaderPreIndex = globalMap[newHeaderX][newHeaderY].index; //新蛇头坐标以前对应的索引
newHeaderPreX = snakeMap[headerIndex].x; //新蛇头的索引以前对应的坐标
newHeaderPreY = snakeMap[headerIndex
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8018 2018-05-03 16:22 贪吃蛇代码.cpp
- 上一篇:C++ 高效 屏幕找图 函数源码
- 下一篇:李建忠c++设计模式
相关资源
- VC2010中文教学版
- 从新手到高手C++全方位学习》+源文件
- Visual Studio2017使用MSComm控件MFC编程
- visual c++6.0win7兼容64位
- VC++6.0安装包绿色版.zip
- mfc科学计算器
- Visual C++数字图像获取、处理及实践应
- vc++.net入门教程
- 算法经典VC++数值分析
- 基于winpcap网络嗅探器 VC++ 中科院课设
- MFC SOCKET TCP VC6.0 服务器 客户端 源码编
- 番茄助手适用于VS2008/2012/2013/ VC6.0
- 基于VC++和OpenGL实现的IGM机器人手臂三
- VC++ 一个非常经典的界面
- Visual C++从入门到精通第三版.pdf
- 《学VC编传奇游戏》.rar
- php-5.2.13-Win32-VC6-x86.msi
- MFC做的连连看
- 基于VC++的邮件收发系统
- php-5.4.8-nts-Win32-VC9-x86.zip
- 点云Las文件读写c++库 Lasib_msvc2015
- VC++案例精编很好的
- TMS320 VC5509A 各种代码例程
- MFC 学生管理系统
- VC++6.0+sql server,学院通讯录管理系统
- Visual C++开发实战1200例(第2卷).(配
- VC++ USB及串口通信工程源码
- Visual C++ 6.0完整绿色版
- Devc++ 5.6.1 绿色版
- SQLAPI++4.1.11 crack for vc++(全面破解版)
评论
共有 条评论