创建一个二维数组,当其中的值为-1时,输出#作为游戏边界,当其中的值为1时,输出@作为蛇头,当其中的值>1时,输出*作为蛇身,当其中的值为-2时,输出F作为食物。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define High 20
#define Width 30
int food_x, food_y; //食物位置
int canvas[High][Width] = { 0 }; //游戏区域的大小
int movedirection; //小蛇的移动方向,1向上,2向下,3向左,4向右
void menu() //游戏菜单
{
printf("************************\n");
printf("***** 1.开始游戏 *****\n");
printf("***** 0.退出游戏 *****\n");
printf("************************\n");
}
void gotoxy(int x, int y) //将光标移动到(x,y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void startup() //数据初始化
{
int i = 0, j = 0; //将数组初始化,以循环进行游戏
for (i = 0; i < High; i++)
{
for (j = 0; j < Width; j++)
{
canvas[i][j] = 0;
}
}
for (i = 0; i < High; i++) //设置边框
{
canvas[i][0] = -1;
canvas[i][Width - 1] = -1;
}
for (i = 0; i < Width; i++) //设置边框
{
canvas[0][i] = -1;
canvas[High - 1][i] = -1;
}
canvas[High / 2][Width / 2] = 1; //设置蛇头
for (i = 1; i < 5; i++) //设置蛇身
{
canvas[High / 2][Width / 2 - i] = i + 1;
}
movedirection = 1; //初始蛇向上走
food_x = rand() % (High - 5) + 2; //设置食物
food_y = rand() % (Width - 5) + 2;
canvas[food_x][food_y] = -2;
}
void show() //显示画面
{
gotoxy(0, 0); //光标移动到原点,以下重画清屏
int i = 0, j = 0;
for (i = 0; i < High; i++)
{ for (j = 0; j < Width; j++)
{
if (canvas[i][j] == 0)
printf(" ");
else if (canvas[i][j] == -1)
printf("#"); //输出边框
else if (canvas[i][j] == 1)
printf("@"); //输出蛇头
else if (canvas[i][j] > 1)
printf("*"); //输出蛇身
else if (canvas[i][j] == -2)
printf("F"); //输出食物
}
printf("\n");
}
Sleep(100);
}
void game()
{
void updatewithoutinput();
void updatewithinput();
while (1)
{
show(); //显示画面
updatewithoutinput(); //与用户输入无关的更新
updatewithinput(); //与用户输入有关的更新
}
}
void movesnake() //蛇的移动
{
int i = 0, j = 0;
for (i = 1; i < High - 1; i++)
for (j = 1; j < Width - 1; j++)
if (canvas[i][j] > 0)
canvas[i][j]++;
int oldT_i, oldT_j, oldH_i, oldH_j;
int max = 0;
for (i = 1; i < High - 1; i++)
for (j = 1; j < Width - 1; j++)
if (canvas[i][j] > 0)
{
if (max < canvas[i][j])
{
max = canvas[i][j];
oldT_i = i;
oldT_j = j;
}
if (canvas[i][j] == 2)
{
oldH_i = i;
oldH_j = j;
}
}
int newH_i = 0, newH_j = 0;
if (movedirection == 1) //蛇向上移
{
newH_i = oldH_i - 1;
newH_j = oldH_j;
}
if (movedirection == 2) //蛇向下移
{
newH_i = oldH_i + 1;
newH_j = oldH_j;
}
if (movedirection == 3) //蛇向左移
{
newH_i = oldH_i;
newH_j = oldH_j - 1;
}
if (movedirection == 4) //蛇向右移
{
newH_i = oldH_i;
newH_j = oldH_j + 1;
}
if (canvas[newH_i][newH_j] == -2) //重置食物
{
canvas[food_x][food_y] = 0;
food_x = rand() % (High - 5) + 2;
food_y = rand() % (Width - 5) + 2;
canvas[food_x][food_y] = -2;
}
else
canvas[oldT_i][oldT_j] = 0;
if (canvas[newH_i][newH_j] > 0 || canvas[newH_i][newH_j] == -1) //判断游戏是否结束
{
printf("游戏结束!\n");
Sleep(1000);
int a = 0;
do //选择是否继续游戏
{
menu(); //游戏菜单
printf("请选择");
scanf("%d", &a);
switch (a)
{
case 1:
system("cls"); //清空屏幕
startup(); //数据初始化
game();
break;
case 0:
printf("退出游戏");
break;
default:
printf("选择错误,请重新选择");
break;
}
} while (a);
exit(0);
}
else
canvas[newH_i][newH_j] = 1;
}
void updatewithoutinput() //与用户输入无关的更新
{
movesnake();
}
void updatewithinput() //与用户输入有关的更新
{
char input;
if (_kbhit())
{
input = _getch();
if (input == 'a') //蛇向左移
{
movedirection = 3;
movesnake();
}
else if (input == 'd') //蛇向右移
{
movedirection = 4;
movesnake();
}
else if (input == 'w') //蛇向上移
{
movedirection = 1;
movesnake();
}
else if (input == 's') //蛇向下移
{
movedirection = 2;
movesnake();
}
}
}
int main()
{
int a = 0;
do
{
menu(); //游戏菜单
printf("请选择");
scanf("%d", &a);
switch (a)
{
case 1:
startup(); //数据初始化
game();
break;
case 0:
printf("退出游戏");
break;
default:
printf("选择错误,请重新选择");
break;
}
} while (a);
return 0;
}
一些小提示和小技巧可能是非常有用的,特别是在编程领域。有时候使用一点点黑客技术,既可以节省时间,还可能挽救“生命”。一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正的生产力助推器。所以,这里有一些小提示和小技巧,有些可能是新的,但我相信在下一个数据分析项目中会让你非常方便。Pandas中数据框数据的Profiling过程Profiling(分析器)是一个帮助我们理解数据的过程,..._anaconda 分位数用什么方法表示
步骤打开所给附件,发现是一个.pcapng结尾的文件,遇事不决直接winhex:发现了wireshark,好家伙直接用wireshark打开,果然是数据包:数据流太多,直接搜索flag关键字(查找分组)发现有的数据包里传输了这几个文件,追踪数据流发现只有php代码啥的,结合题目菜刀,我还以为是往web方向发展了?结果还是我太年轻了。折腾了大半天(说多了都是泪),最后查了师傅们的文章(才知道自己想法错的有多离谱),发现第1150个包有问题,多了一个图片继续追踪tcp流发现图片(jpg.
在进行2进制保存文档的时候如图1,提示如 图2未能加载文件或程序集“HelperSQL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。举报| 2015-08-20 16:16#行家高质畅答赛火热开赛 !超级豪礼等你来~#
直接上图 , 心累…_小程序webview的console.log会被挡住
题库来源:安全生产模拟考试一点通公众号小程序2020年G2电站锅炉司炉作业模拟考试及G2电站锅炉司炉在线考试,包含G2电站锅炉司炉作业模拟考试答案和解析及G2电站锅炉司炉在线考试练习。由安全生产模拟考试一点通公众号结合国家G2电站锅炉司炉考试最新大纲及G2电站锅炉司炉考试真题汇总,有助于G2电站锅炉司炉怎么考考前练习。1、【判断题】锅炉排污分为:定期排污和表面排污。()(√)2、【判断题】锅炉热损失中,排烟热损失是最大的热损失。()(√)3、【判断题】特种设备作业人员在作..._工作压力为>5.9mpa的锅炉,两只安全阀中较低的整定压力为()工作
1、标题移动到右边原本legend: { data:['同龄普通孩子','已具备技能','已泛化技能','已掌握技能','学习中']},改legend: { data:['同龄普通孩子','已具备技能','已泛化技能','已掌握技能','学习中'], orient: 'vertical', //垂直显示 y: 'center', //延Y轴居中 x: 'righ_echarts饼图属性
根据Google官方博客报道,除了发布Google Chrome浏览器之外,Google最新还同时发布了新版图片管理软件Picasa 3英文版(中文版还依旧是2.7),经过一番试用,我发现Picasa 3有不少值得称赞的亮点。 图片预览功能 Windows XP自带了一个很简陋的图片预览功能,安装最新版本的Picasa3,会替换默认的Windows图片预览,而使用Picasa的图片预
极虎病毒是目前为止,集成了各种病毒、***、***下载器、蠕虫特征的超强恶意软件。差不多是若干知名病毒的混合体:传播方式超越熊猫烧香;对杀毒软件的破坏力相当于AV终结者、磁碟机;对系统的破坏力更是始无前例;***者的目标极度贪婪,会下载各种盗号***、流氓软件,偷帐号,弹广告,刷流量,可谓无恶不作。来分析一下极虎病毒创造的四个“之最”:1.传播方式“最”多样:(1)网页挂马传...
FROM: http://lovewf.blog.51cto.com/1723922/674236最近学习Api文档,打开Android.graphics.Bitmap类里有一个内部类Bitmap.Config类,在Bitmap类里createBitmap(int width, int height, Bitmap.Config config)方法里会用到,打开个这个类一看枚举
【南京大学考研网 nandakaoyan.com 天文与空间科学学院】 报考南京大学天文系有什么要求?唯一权威的南京大学考研网站为大家提供:报考南京大学天文系有什么要求?,本站由南京大学研究生创办,更多南大考研资讯请关注我们网站的更新!敬请收藏本站。下面是关于报考南京大学天文系要求基本情况:打算报考天文专业的学生应当了解什么是天文学,什么样的学生适合攻读天文专业,在南京大学天文系的学生将学些什么,..._什么专业可以考天文学研究生
导读: UDDI技术概述 UDDI(Universal Description, Discovery and Integration)--统一描述、发现与集成协议标准是一个非常重要的创新。它是第一个由平台提供者、软件开发者、交易市场运营者、电子商务企业和全球商务领头羊为解决B2B 电子商务的发展的局限性而一起提出的跨行业的解决方案, 是一套基于Web的、分布式的、为Web服务提供的
关于Java数组你知道多少?1. 什么是数组数组是一种线性结构的数据结构。线性结构在内存中是连续的,是用来储存同一类型的数据的集合数组特点 :连续 ,每个元素都有下标 ,可以快速查找 ,但是从中间添加,删除就比较麻烦数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,也可以存储引用数据类型。2.数组的声明在声明数组变量时 , 需要给定数组类型(数组中存储的数据类型必须和数组的类型相同)和数组变量的名字 。//第一种声明方式 //数组类型[] 数组变量名字;int[] a;//第