#include

#include

#include

#include

#include

#define W 32

#define H 22

const int SIZE_SK = 30*20;

HANDLE hOut;

COORD pos= {0, 0};

CONSOLE_CURSOR_INFO cur_info = {1, 0};

struct snake {

short x, y; //节点坐标

short md; //节点运动方向

short num; //节点内容

int col; //节点颜色

} snake[30*20];

const short dx[4] = {-1, 1, 0, 0}; //方向

const short dy[4] = {0, 0, -1, 1}; //方向

short gamemap[W][H];

short head, tail, score=0;

void initmap(int tm);

void createFood(void);

int getkeys(void);

int move(int idx);

void pntSnake(int i);

void drawEdge(void);

void gameinfo(char *s, int n);

int main(void)

{

int tm = 150; //刷新间隔150毫秒

hOut = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorInfo(hOut, &cur_info); //隐藏光标

system("COLOR 2f");

initmap(tm);

return 0;

}

void initmap(int tm)

{

short x, y, i, j;

int index, tmp, ret_m;

while (1){

head=0;

tail=-1;

score=0;

//初始化蛇节点随机颜色

srand(time(0));

for (i=0; i

snake[i].col = rand()%8+8 | 0x20;

//初始化地图数组

for (i=0; i

for (j=0; j

gamemap[i][j] = 0;

system("cls");

//绘制边界

drawEdge();

//打印蛇头

srand(time(0));

do {

x = rand()%(W-2) + 1;

y = rand()%(H-2) + 1;

} while (gamemap[x][y] != 0); //只在空白处生成

snake[head].x = x;

snake[head].y = y;

gamemap[x][y] = snake[head].num = 1;

pos.X = x*2;

pos.Y = y;

SetConsoleCursorPosition(hOut, pos);

printf("█");

//打印食物

createFood();

while ((index=getkeys()) == 4)

Sleep(500);

//循环开始

while (1){

ret_m = move(index);

if (ret_m == 1){

pos.X = 0; pos.Y = H;

SetConsoleCursorPosition(hOut, pos);

printf("哎呀,挂了哦 ^_^");

break;

}

else if (ret_m == 2){

pos.X = 0; pos.Y = H;

SetConsoleCursorPosition(hOut, pos);

printf("哎呀,超神了 ^_^");

break;

}

Sleep(tm);

if ((tmp = getkeys()) != 4)

index = tmp;

}

//菜单代码

puts(" 按w\\s\\a\\d 继续玩,退出请关闭我");

getch();

}

}

void createFood(void)

{

short x, y;

srand(time(0));

do {

x = rand()%(W-2) + 1;

y = rand()%(H-2) + 1;

} while (gamemap[x][y] != 0);

gamemap[x][y] = 2;

pos.X = x*2; pos.Y = y;

SetConsoleCursorPosition(hOut, pos);

SetConsoleTextAttribute(hOut, 0x2f);

printf("⊙");

}

int getkeys(void) //获取方向键

{

char ch;

while(kbhit()){

ch = getch();

if(ch == 'w')

return 2;

if(ch == 's')

return 3;

if(ch == 'a')

return 0;

if(ch == 'd')

return 1;

while (kbhit());

}

return 4;

}

int move(int idx)

{

int newx, newy, pt_tail, i;

newx = snake[head].x + dx[idx];

newy = snake[head].y + dy[idx];

switch (gamemap[newx][newy]){

case 0:

if ((head = ++head%SIZE_SK) != tail){ //不相等即蛇节点队列未满

snake[head].x = newx;

snake[head].y = newy;

snake[head].num = 1;

gamemap[newx][newy] = 1;

tail = ++tail%SIZE_SK;

snake[tail].num = 0; //清除尾部,打印空字符

gamemap[snake[tail].x][snake[tail].y] = 0;

snake[head].md = idx; //存储移动方向

pt_tail = tail - 1;

}

else

return 2; //回合结束标记2代表蛇填满空间

break;

case 2:

if ((head = ++head%SIZE_SK) != tail){ //不相等即蛇节点队列未满

snake[head].x = newx; //head+1后存储新坐标为蛇头

snake[head].y = newy;

snake[head].num = 1;

gamemap[newx][newy] = 1;

snake[head].md = idx; //存储移动方向

pt_tail = tail = tail%SIZE_SK;

score++;

createFood();

}

break;

case 3:

return 1; //遇到墙壁

case 1:

return 1; //遇到自身

default: ;

}

//打印蛇

if (pt_tail == -1)

pt_tail++;

if (pt_tail < head){ //尾巴在头部后面(这两者是数组索引)

for (i=pt_tail; i<=head; i++){

pntSnake(i); //打印

}

}

else{

for (i=pt_tail; i

pntSnake(i);

for (i=0; i<=head; i++)

pntSnake(i);

}

gameinfo(" 分数", score);

return 0;

}

void pntSnake(int i)

{

//转换x坐标:内部是连续整数,打印时一个字符占位2,所以要2x

pos.X = snake[i].x * 2;

pos.Y = snake[i].y;

SetConsoleCursorPosition(hOut, pos);

if (snake[i].num == 0){

putchar('\0'); //清除蛇尾

putchar('\0');}

else if (snake[i].num == 1){

//下面函数第二个参数低4位控制前景色,高4位控制背景色,共8位

SetConsoleTextAttribute(hOut, snake[i].col);

printf("█");

}

}

void drawEdge(void)

{

int i;

for (i=0; i

pos.X = i*2; pos.Y = 0;

SetConsoleCursorPosition(hOut, pos);

printf("█");

gamemap[i][pos.Y] = 3;

pos.Y = H-1;

SetConsoleCursorPosition(hOut, pos);

printf("█");

gamemap[i][H-1] = 3;

}

for (i=1; i

pos.X = 0; pos.Y = i;

SetConsoleCursorPosition(hOut, pos);

printf("█");

gamemap[pos.X][i] = 3;

pos.X = (W-1)*2;

SetConsoleCursorPosition(hOut, pos);

printf("█");

gamemap[W-1][i] = 3;

}

}

void gameinfo(char *s, int n)

{

pos.X = 0; pos.Y = H;

SetConsoleCursorPosition(hOut, pos);

SetConsoleTextAttribute(hOut, 0x2f);

printf(" 贪吃蛇");

printf(" %s: %d", s, n);

}

c++语言代码游戏,c++小游戏(贪吃蛇)源程序相关推荐

  1. 赛车小游戏c语言代码,网页赛车小游戏(纯JavaScript编写)

    赛车(改良版) 利用js实现以下功能: 在四个赛道随记生成路障,其移动速度随用户生存的时间增加而增加 用户可以通过方向键或者A.D键控制用户小车左右移动,躲避路障 当路障与用户小车碰撞,游戏结束 实时 ...

  2. C语言可以敲哪些小游戏,C语言可以写哪些小游戏?

    C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...

  3. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  4. python小游戏代码大全-20行python代码的入门级小游戏的详解

    背景: 作为一个python小白,今天从菜鸟教程上看了一些python的教程,看到了python的一些语法,对比起来(有其他语言功底),感觉还是非常有趣,就随手添了一点内容,改了一个小例程,当着练练手 ...

  5. c语言射击类小游戏任务书,(c语言课程设计报告小游戏“石头剪子布”.doc

    (c语言课程设计报告小游戏"石头剪子布" <C语言课程设计>报告 题目:石头剪子布 班级: 学号: 姓名: 指导教师: 成绩: 目 录: 一.选题背景- 3 - 二.设 ...

  6. 贪吃蛇javascript代码_源于Jquery开发贪吃蛇游戏——简单思路分析总结

    前言 刚开始是学习前端那会,在熟悉 HTML+CSS+JS 后,我开始尝试去做贪吃蛇游戏.没想到在一顿瞎搞后还真搞出来了一个简陋版的贪吃蛇.哈哈!因为这是我刚开始学习前端的时候做的,所以代码有点简陋, ...

  7. R语言入门——猜数小游戏

    R语言入门--猜数小游戏 题目介绍 使用代码(2种方法) 运行结果 题目介绍 设计一个猜数字的游戏:计算机随机生成一个1~100 之间的整数,然后由用户猜测所产生的随机数.根据用户猜测的情况给出不同提 ...

  8. C语言开发打气球小游戏

    C语言开发打气球小游戏 首先我们写一下项目所需要的头文件 #include<stdio.h>//标准输入输出头文件 #include<math.h>//数学库头文件 #incl ...

  9. c语言做搬山游戏,C语言实现搬山小游戏,适合新手的项目实战,超易上手!

    原标题:C语言实现搬山小游戏,适合新手的项目实战,超易上手! 问题描述 设有n座山,计算机与人作为比赛的双方,轮流搬山.规定每次搬山数不能超过k座,谁搬最后一座谁输. 游戏开始时,计算机请人输入山的总 ...

  10. 用C语言做一个迷宫小游戏

    用C语言做一个迷宫小游戏,以下是代码段 这个迷宫游戏使用了递归回溯算法来寻找通往出口的路径.迷宫中的墙用'#'表示,路径用空格表示,入口和出口分别用'S'和'E'表示,已走过的路径用'*'表示.在生成 ...

最新文章

  1. 生成对抗网络(GAN)的理论与应用完整入门介绍
  2. 电脑pdf阅读器哪个好用_电脑免费录屏软件哪个好用?这两个录屏方法千万别错过...
  3. 20211222 AB和BA具有相同的非零特征值;如果A和B均方,且AB=I,那么BA=I,A、B均可逆
  4. Java编程思想学习(一) 一切都是对象
  5. LeetCode 507. 完美数
  6. HALCON学习之旅(三)
  7. Intellij IDEA--修改JDK版本
  8. 最新html word 分页符,分页符 有什么用
  9. NRF52832-QFAA、NRF52840-QIAA性能区别-蓝牙智能手环穿戴
  10. 夸克浏览器网页版入口网址分享
  11. mac笔记本常用快捷键
  12. securecrt导出linux日志文件,secureCRT保存屏幕输出内容
  13. 什么是基本的逻辑运算?
  14. 43、总建筑面积大于20000㎡的地下或半地下建筑的防火要求
  15. java词云生成,kumo项目详解
  16. ACM-ICPC 2018 南京赛区网络预赛 J Sum(欧拉线性筛+思维)
  17. IOS开发笔记(九)——IM聊天工具个人详情页面,自定义tableview的accessaryView
  18. 基于socket的聊天工具
  19. 25PXE高效批量网络装机
  20. 英语学习相关网站及工具的记录

热门文章

  1. 云服务器 ECS > 块存储 > 块存储介绍 > 块存储概述 请输入关键词
  2. Linux简单死锁程序,Linux 死锁例子
  3. markdown 本地链接_Markdown的使用
  4. linux文本模式无法打字,文本终端模式下中文输入法(Fcitx)配置(openSUSE Leap 42.1)...
  5. redis怎么修改_面试官问我Redis事务,还问我有哪些实现方式
  6. vue 截取视频第一帧
  7. idea 导入到码云
  8. cisco2960开启snmp
  9. 通过样式调整input 中password text默认长度
  10. JS中的类,类的继承方法