c++ 让程序玩贪吃蛇游戏
贪吃蛇游戏的代码
#include <iostream>
#include <string>
#include<windows.h>
#include <conio.h>
#include<thread>
#include "/Users/Administrator/source/repos/ConsoleApplication1/Test.h"
using namespace std;
string h1 = "*****************************************************************************\n";
string h2 = "* *\n";
clock_t tstart, tfinish;
const unsigned char CTRL_KEY = 0XE0;
const unsigned char LEFT = 0X4B;
const unsigned char RIGHT = 0X4D;
const unsigned char DOWN = 0X50;
const unsigned char UP = 0X48;
typedef struct snbody
{
char z = '%';
short x, y;
}Body;
Body B[1678], A;
Body *Topbody = &B[1];
Body *Nxbody = &B[0];
Body *Midbody = &A;
char map[76][22] = { 0 };
short xpos = 10, ypos = 5;
short showchar();
short nxchar = 1;
int start = 1;
int out(short x, short y);
int stime = 200;
int num = 0;
short tar[2];
int onmap(short x, short y,char z)
{
if ( map[x][y] != '<' && map[x][y] != '>' && map[x][y] != 'A' && map[x][y] != 'V')
{
if (Topbody - B > 1670)
Topbody = &B[0];
if(Nxbody -B > 1670)
Nxbody = &B[0];
Topbody->z = map[x][y] = z;
Topbody->x = x;
Topbody->y = y;
//Midbody->z = Topbody->z;
if (x == xpos && y == ypos)
{
++num;
xpos = (rand() % (76 - 1)) + 1;
ypos = (rand() % (22 - 1)) + 1;
tar[0] = xpos;
tar[1] = ypos;
if(stime>100)
stime = stime-10;
}
else
{
out(Nxbody->x, Nxbody->y);
map[Nxbody->x][Nxbody->y] = '0';
Nxbody->z = '0';
printf("%c",'\0');
++Nxbody;
}
out(x, y);
cout << Topbody->z;
++Topbody;
}
else
{
cout << "game over!!!";
start = 0;
system("cls");
out(38,12);
cout << "一共吃掉:" << num <<"个桃子"<< endl;
Sleep(5000);
return 1;
}
return 0;
}
int movefor(short *pos,char z ,int (*pt)(short *, char ))
{
while (TRUE)
{
showchar();
if(_kbhit())
return 0;
Sleep(stime);
// pt(pos, z); 这里的注释,原本是调用方向键按下的对应函数,但现在用下面的Test函数来玩这个游戏。
Test(pos, tar,map, z);
}
return 0;
}
int out(short x,short y)
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获得屏幕的尺寸。
COORD pos = { x,y };//设置坐标
SetConsoleCursorPosition(hOut, pos);//设置位置
return 0;
}
int move_left(short *pos, char z)
{
if (pos[0] <= 1)
pos[0]=76;
out(--pos[0],pos[1]);
if (onmap(pos[0], pos[1],z='<'))
return 1;
movefor(pos, z, move_left);
return 0;
}
int move_right(short *pos, char z)
{
if (pos[0] >= 75)
pos[0]=0;
out(++pos[0], pos[1]);
if (onmap(pos[0], pos[1],z='>'))
return 1;
movefor(pos, z, move_right);
return 0;
}
int move_up(short *pos, char z)
{
if (pos[1] <= 1)
pos[1]=22;
out(pos[0], --pos[1]);
if (onmap(pos[0], pos[1],z='A'))
return 1;
movefor(pos, z, move_up);
return 0;
}
int move_down(short *pos,char z)
{
if (pos[1] >= 21)
pos[1]=0;
out(pos[0], ++pos[1]);
if (onmap(pos[0], pos[1],z='V'))
return 1;
movefor(pos, z, move_down);
return 0;
}
short showchar()
{
//int x,y;
out(xpos,ypos);
switch(nxchar)
{
case 1:cout << '|' << '\b'; break;
case 2:cout << '/' << '\b'; break;
case 3:cout << '-' << '\b'; break;
case 4:cout << '\\' << '\b'; break;
default:nxchar = 1; break;
}
++nxchar;
tfinish=clock();
out(86, 1);
printf("%u",(tfinish - tstart) / CLOCKS_PER_SEC );
out(92, 3);
cout << num;
return 0;
}
int main(){
char z = '*';
cout << h1 ;
for (int i = 0; i <= 20; i++)
cout << h2;
cout << h1;
out(80, 1);
cout << "时间:" ;
out(80, 3);
cout << "你已经吃了:"<<'\t'<< "个桃子";
short pos[2] = {38,11};
int flag = 0;
out(pos[0], pos[1]);
xpos = (rand() % (76 - 1)) + 1;
ypos = (rand() % (22 - 1)) + 1;
tstart=clock();
srand(tstart);
tar[0] = xpos;
tar[1] = ypos;
while (start)
{
Test(pos, tar,map, z);
if (flag)
{
switch (_getch())
{
case LEFT:move_left(pos,z); break;
case RIGHT:move_right(pos, z ); break;
case DOWN:move_down(pos, z ); break;
case UP:move_up(pos, z ); break;
default: break;
}
}
else
{
if (_getch() == CTRL_KEY)
flag = 1;
}
}
下面是让程序自己玩贪吃蛇
int Test(short *pos, short *tar, char(*map)[22], char z)
{
int x, y;
x = pos[0];
y = pos[1];
char stopr = '0';
char stopl = '0';
char stopu = '0';
char stopd = '0';
if (map[x + 1][y] == 'A' || map[x + 1][y] == 'V')
stopr = map[x + 1][y];
if (map[x - 1][y] == 'A' || map[x - 1][y] == 'V')
stopl = map[x - 1][y];
if (map[x][y - 1] == '<' || map[x][y - 1] == '>')
stopu = map[x][y - 1];
if (map[x][y + 1] == '<' || map[x][y + 1] == '>')
stopd = map[x][y + 1];
if (pos[0] < tar[0] && map[x + 1][y] != '<' && map[x + 1][y] != '>' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V' )
{
move_right(pos, z);
}
else if (pos[0] > tar[0] && map[x - 1][y] != '<' && map[x - 1][y] != '>' && map[x - 1][y] != 'A' && map[x - 1][y] != 'V' )
{
move_left(pos, z);
}
else if (pos[1] < tar[1] && map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V' )
{
if (z == '<')
{
if (stopl == 'V'&& map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
move_up(pos, z);
else
move_down(pos, z);
}
else if (z == '>')
{
if (stopr == 'V'&& map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
move_up(pos, z);
else
move_down(pos,z);
}
else
move_down(pos, z);
}
else if (pos[1] > tar[1] && map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
{
if (z == '<')
{
if (stopl == 'A'&& map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
move_down(pos, z);
else
move_up(pos, z);
}
else if (z == '>')
{
if (stopr == 'A'&& map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
move_down(pos, z);
else
move_up(pos, z);
}
else
move_up(pos, z);
}
else
{
if ( map[x - 1][y] != '<' && map[x - 1][y] != '>' && map[x - 1][y] != 'A' && map[x - 1][y] != 'V' )
{
if (z == 'V')
{
if (stopd == '<'&& map[x + 1][y] != '>' && map[x + 1][y] != '<' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V')
move_right(pos, z);
else
move_left(pos, z);
}
else if (z == 'A'&& map[x + 1][y] != '>' && map[x + 1][y] != '<' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V')
{
if (stopu == '<')
move_right(pos, z);
else
move_left(pos, z);
}
else
move_left(pos,z);
}
else if ( map[x + 1][y] != '<' && map[x + 1][y] != '>' && map[x + 1][y] != 'A' && map[x + 1][y] != 'V')
{
if (z == 'V')
{
if (stopd == '>'&& map[x - 1][y] != '>' && map[x - 1][y] != '<'&& map[x - 1][y] != 'A' && map[x - 1][y] != 'V')
move_left(pos, z);
else
move_right(pos, z);
}
else if (z == 'A')
{
if (stopu == '>'&& map[x - 1][y] != '>' && map[x - 1][y] != '<' && map[x - 1][y] != 'A' && map[x - 1][y] != 'V')
move_left(pos, z);
else
move_right(pos, z);
}
else
move_right(pos, z);
}
else if (map[x][y + 1] != '<' && map[x][y + 1] != '>' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V' )
{
if (z == '>')
{
if (stopr == 'V'&& map[x][y - 1] != '>'&& map[x][y - 1] != '<' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
move_up(pos, z);
else
move_down(pos, z);
}
else if (z == '<')
{
if (stopl == 'V'&& map[x][y - 1] != '>'&& map[x][y - 1] != '<' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
move_up(pos, z);
else
move_down(pos, z);
}
else
move_down(pos, z);
}
else if ( map[x][y - 1] != '<' && map[x][y - 1] != '>' && map[x][y - 1] != 'A' && map[x][y - 1] != 'V')
{
if (z == '>')
{
if (stopr == 'A'&& map[x][y + 1] != '>'&& map[x][y + 1] != '<' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
move_down(pos, z);
else
move_up(pos, z);
}
else if (z == '<')
{
if (stopl == 'A'&& map[x][y + 1] != '>' && map[x][y + 1] != '<' && map[x][y + 1] != 'A' && map[x][y + 1] != 'V')
move_down(pos, z);
else
move_up(pos, z);
}
else
move_up(pos, z);
}
}
return 0;
}
c++ 让程序玩贪吃蛇游戏相关推荐
- C语言:如何在cmd命令窗口上玩贪吃蛇游戏
最近在重新学习C语言知识,还别说,在这个过程中,我还真的学到了过去很多没有学习到C语言知识,于是就做了这个游戏–贪吃蛇. 运行结果如下: C语言:如何在cmd命令窗口上玩贪吃蛇游戏 文章目录 1. 实 ...
- 黑马程序员——贪吃蛇游戏项目分析过程
---------------------- <a href="http://edu.csdn.net/heima" target="blank"> ...
- 【python教程入门学习】Python实现自动玩贪吃蛇程序
这篇文章主要介绍了通过Python实现的简易的自动玩贪吃蛇游戏的小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一学 实现效果 先看看效果 这比我手动的快多了,而且是单机的,自动玩没惹 ...
- 我的编辑器能玩贪吃蛇,一起玩不?
摘要:你们说,能不能把这个贪吃蛇游戏插入到编辑中呢? 本文分享自华为云社区<整个贪吃蛇到编辑器里玩吧>,原文作者:DevUI. 能不能把这个贪吃蛇游戏插入到编辑中呢? 按照以下四个步骤来就 ...
- python小游戏课程设计报告_贪吃蛇游戏课程设计报告
贪吃蛇游戏程序设计 一.课程设计任务 贪吃蛇小游戏程序设计 二.设计要求 通过游戏程序设计,提高编程兴趣与编程思路,巩固 C 语言中所学的知识,合理的运 用资料,实现理论与实际相结合. ( 1 ) . ...
- 用STM32F103使用OLED屏实现贪吃蛇游戏
偶然一天突发奇想想在MCU上实现一个小游戏,综合现有硬件开发资源和开发能力,想来想去贪吃蛇最为合适. 有之前朋友留给我的一块四轴飞行器遥控器的电路板,上面有摇杆按键和OLED瓶.STM32F103R8 ...
- 贪吃蛇大作战代码java,贪吃蛇游戏,贪吃蛇java游戏代码讲解
贪吃蛇游戏,贪吃蛇java游戏代码讲解 来源:互联网 作者:佚名 时间:2020-06-06 贪吃蛇源代码.txt这世界上除了我谁都没资格陪在你身边. 听着,我允许你喜欢我.除了白头偕老,我们... ...
- python设计贪吃蛇游戏论文_用Python写一个贪吃蛇AI,让程序自己玩游戏
前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...
- python写的游戏怎么给别人玩-一步步教你怎么用python写贪吃蛇游戏
目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Pytho ...
- c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...
对于贪吃蛇游戏,大家基本上都玩过,但是作为一个程序员,大家是否想过要自己去写一个贪吃蛇,毕竟玩别人写的游戏和自己写的游戏是两种截然不同的感受,而且也可以通过制作来提升自己的技术! 其实贪吃蛇的逻辑并不 ...
最新文章
- CodeForces - 813C The Tag Game(拉格朗日乘数法,限制条件求最值)
- python语言表白源码-python七夕浪漫表白源码
- 初始html(常用标签)
- Python的第一种数据类型——Number(数字)
- linux 正则查找email_Linux 正则表达式详解
- jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
- vue企业网站模板_模板网站VS定制网站,企业如何选择?
- button小手设置 css的cursor
- thinkphp增删改查
- cmw500综合测试仪使用_网络性能测试仪该怎么选
- java ir_基本功 | Java即时编译器原理解析及实践
- laravel 图片流_laravel 做图片的缩略图 踩坑
- 山寨qq java_MTK手机QQjava版本山寨qq2009通用版
- 滑动窗口协议(GBN, SR)
- JS实现中文转拼音首字母和五笔简码
- 【小工具】文件夹映射为本地磁盘(重启不失效)
- php算法----队列
- Java中extends 与 implement 区别
- 计算机课代表的总结,课代表心得体会总结范文
- Redis 自定义对象 cannot be cast to java.lang.String