
#include <stdioh>
#include <mathh>
double num[4];//存储4个数字
double pre = 1E-6; //精度
int go(int n)
{
int i,j;
if(n==1)
{
if(fabs(num[0]-24)<1E-6)
return 1;
else
return 0;
}
else
{
for(i=0;i<n-1;i++)
{
double a=num[i];
double b=num[i+1];
for(j=i+1;j<n-1;j++)
{
num[j]=num[j+1];
}
num[i]=a+b;
if(go(n-1)) return 1;
num[i]=a-b;
if(go(n-1)) return 1;
num[i]=ab;
if(go(n-1)) return 1;
if(b!=0)
{
num[i]=a/b;
if(go(n-1)) return 1;
}
for(j=n-1;j>i+1;j--)
{
num[j]=num[j-1];
}
num[i+1]=b;
num[i]=a;
}
}
return 0;
}
int main()
{
double sum;
int i;
do
{
sum=0;
for(i=0;i<4;i++)
{
scanf("%lf",&num[i]);
sum+=num[i];
}
if(sum>1)
{
if(go(4))
printf("YES\n");
else
printf("NO\n");
}
}while(sum>1);
return 0;
}
1、通过scratch官网scratchmitedu,下载程序scratch30,安装完成打开后,把小猫角色删除。
2、通过搜索引擎,分别下载小朋友、口罩和病毒的卡通,然后点击添加角色按钮,把他们添加好并设定好角色名称和合适的大小。
3、新建得分和时间两个变量。
4、、为角色小朋友添加代码,可以根据各个代码模块不同的颜色,去寻找需要的代码。
5、为角色口罩添加代码。
6、为角色病毒添加代码。
7、右击角色,适当地复制几个口罩和病毒角色。
8、点击文件,保存到电脑,输入文件名,保存好作品。
#include <stdioh>
#include <stdlibh>
#include<timeh>
int main(void)
{
int rst,g;
int guesscount;
//用随机函数了
srand( time(NULL) );
printf("猜数游戏,输入-1退出\r\nLet's go !\r\n\r\n");
do
{
//生成随机数
rst = (int)((double) rand() /(double) RAND_MAX 100);
//重置猜的次数
guesscount = 0;
while( 1 )
{
guesscount++;
printf("猜猜是几:");
scanf("%d",&g);
if( g==-1) //如果输入的玩家数为-1,退出程序
return 0;
if(g == rst )
{
printf("恭喜,只用%d次就猜对了。\r\n再来一把!\r\n",guesscount);
break;
}
else
{
if (guesscount < 10 )
printf("%s了,再",g > rst "大":"小" );
else
{
printf("看来你猜不出来了,试试下一个。\r\n");
break;
}
}
}
} while(1);
return 0;
};
学生课程设计(论文)
题 目: 贪吃蛇游戏程序设计指导
学生姓名: 学 号:200910801001
所在院(系): 计算机学院
专 业: 计算机科学与技术
班 级: 2009级一班
指导教师: 何春燕 职称: 讲 师
2010年06月 18日
目录
摘要…………………………………………………………6
1、设计要求…………………………………………………7
2、所用仪器设备……………………………………………7
3、具体设计过程……………………………………………8
31、程序功能……………………………………………8
32设计思想………………………………………………8
33.设计的具体实现……………………………………8
34 总体流程图…………………………………………14
35、程序代码编写及注释………………………………15
36调试问题及解决方法…………………………………21
37调试结果……………………………………………22
4设计心得体会………………………………………………25
5、参考文献………………………………………………26
摘 要
编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。作为一个完整的程序,尤其是一个完整的游戏,必须考虑人机交流与用户体验。游戏的界面不能太丑,更不能连个简单的界面都没有。游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣,最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
关键词 贪吃蛇 流程图 c语言 源程序 turbo C
贪吃蛇游戏程序设计
1、设计要求
通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;
(2).深入分析各个小问题,列出大纲,编写各部分程序模块;
(3).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;
(4).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;
(5).完成课程设计报告,并进行答辩
C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。
制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。
通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形 *** 作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。
2、所用仪器设备
1、能正常工作的计算机一台; 2、WindowsXP;
3、TC程序; 4、Microsoft Word2003;
3、具体设计过程
31、程序功能
贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体叉蛇头撞倒自己身体游戏结束。
32 设计思想
程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。
33.设计的具体实现
(1)函数定义
函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用
#define N 200
#include <graphicsh>/图形头文件/
#include <stdlibh>/包含rand等函数/
#include <dosh>/包含bios函数/
#define LEFT 0x4b00/光标左键值/
#define RIGHT 0x4d00/光标右键值/
#define DOWN 0x5000/光标下键值/
#define UP 0x4800/光标上键值/
#define ESC 0x011b/ESC的ASCII码/
int i,key;/图形坐标变量及按键变量/
int score=0;/得分/
int gamespeed=10000;/游戏速度自己调整/
struct Food
{
int x;/食物的横坐标/
int y;/食物的纵坐标/
int yes;/判断是否要出现食物的变量/
}food;/食物的结构体/
struct Snake
{
int x[];/蛇的横坐标/
int y[];/蛇的纵坐标/
int node;/蛇的节数/
int direction;/蛇移动方向/
int life;/ 蛇的生命,0活着,1死亡/
}snake;
void Init(void);/图形驱动/
void Close(void);/图形结束/
void DrawK(void);/画界面函数/
void GameOver(void);/结束游戏/
void GamePlay(void);/玩游戏具体过程/
void PrScore(void);/输出成绩/
void main(void)/主函数/
(2)主函数main( )
主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序
void main(void)/主函数/
{
Init();/图形驱动/
DrawK();/开始画面/
GamePlay();/玩游戏具体过程/
Close();/图形结束/
}
void Init(void)/图形驱动/
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc"); /第一个参数表示图形适配器的类型,第二个为在该类型下图形的显示模式,第三个参数指定驱动程序所在目录。/
cleardevice();
}
(3) 画界面函数DrawK( )
主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。
void DrawK(void)/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙/
{
setbkcolor(0);/设置当前背景颜色/
setcolor(YELLOW);/设置当前画线颜色/
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/设置线型/
for(i=50;i<=600;i+=10)/画围墙/
{
rectangle(i,40,i+10,49); /上边/
rectangle(i,451,i+10,460);/下边/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /左边/
rectangle(601,i,610,i+10);/右边/
}
}
(4)游戏具体过程函数GamePlay( )
这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。
void GamePlay(void)/玩游戏具体过程/
{
randomize();/随机数发生器/
foodyes=1;/1表示需要出现新食物,0表示已经存在食物/
snakelife=0;/活着/
snakedirection=1;/方向往右/
snakex[0]=100;snakey[0]=100;/蛇头/
snakex[1]=110;snakey[1]=100;/蛇第二节/
snakenode=2;/节数/
PrScore();/输出得分/
while(1)/可以重复玩游戏,压ESC键结束/
{
while(!kbhit())/在没有按键的情况下,蛇自己移动身体/
{
if(foodyes==1)/需要出现新食物/
{
foodx=rand()%400+60;
foody=rand()%350+60;
while(foodx%10!=0)/食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/
foodx++;
while(foody%10!=0)
foody++;
foodyes=0;/画面上有食物了/
}
if(foodyes==0)/画面上有食物了就要显示/
{
setcolor(GREEN);/食物的颜色/
rectangle(foodx,foody,foodx+10,foody-10);
}
for(i=snakenode-1;i>0;i--)/蛇的每个环节往前移动,贪吃蛇的关键算法/
{
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
switch(snakedirection) /定义1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/
{
case 1:snakex[0]+=10;break;
case 2: snakex[0]-=10;break;
case 3: snakey[0]-=10;break;
case 4: snakey[0]+=10;break;
}
for(i=3;i<snakenode;i++)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/
{
if(snakex[i]==snakex[0]&&snakey[i]==snakey[0])
{
GameOver();/显示失败/
snakelife=1;
break;
}
}
if(snakex[0]<55||snakex[0]>595||snakey[0]<55||snakey[0]>455)/蛇是否撞到墙壁/
{
GameOver();/本次游戏结束/
snakelife=1; /蛇死/
}
if(snakelife==1)/以上两种判断以后,如果蛇死就跳出内循环,重新开始/
break;
if(snakex[0]==foodx&&snakey[0]==foody)/吃到食物以后/
{
setcolor(0);/把画面上的食物东西去掉/
rectangle(foodx,foody,foodx+10,foody-10);
snakex[snakenode]=-20;snakey[snakenode]=-20; /-20表示尾巴长一节/
/新的一节先放在看不见的位置,下次循环就取前一节的位置/
snakenode++;/蛇的身体长一节/
foodyes=1;/画面上需要出现新的食物/
score+=10;
PrScore();/输出新得分/
}
setcolor(4);
for(i=0;i<snakenode;i++)/画出蛇/
rectangle(snakex[i],snakey[i],snakex[i]+10,
snakey[i]-10);
delay(gamespeed);
setcolor(0);/用黑色去除蛇的的最后一节/
rectangle(snakex[snakenode-1],snakey[snakenode-1],
snakex[snakenode-1]+10,snakey[snakenode-1]-10);
} /endwhile(!kbhit)/
if(snakelife==1)/如果蛇死就跳出循环/
break;
key=bioskey(0);/接收按键/
if(key==ESC)/按ESC键退出/
break;
else
if(key==UP&&snakedirection!=4)
/判断是否往相反的方向移动/
snakedirection=3;
else
if(key==RIGHT&&snakedirection!=2)
snakedirection=1;
else
if(key==LEFT&&snakedirection!=1)
snakedirection=2;
else
if(key==DOWN&&snakedirection!=3)
snakedirection=4;
}/endwhile(1)/
}
(5)游戏结束函数GameOver( )
游戏结束,清除屏幕,输出分数,显示游戏结束信息。
void GameOver(void)/游戏结束/
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"guojian");
getch();
}
void PrScore(void)/输出成绩/
{
char str[10];
setfillstyle(SOLID_FILL, WHITE);
bar(50,15,200,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
void Close(void)/图形结束/
{
getch();
closegraph();
}
34 总体流程图
}
35、程序代码编写及注释
#define N 200
#include <graphicsh>
#include <stdlibh>
#include <dosh>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/得分/
int gamespeed=50000;/游戏速度自己调整/
struct Food
{
int x;/食物的横坐标/
int y;/食物的纵坐标/
int yes;/判断是否要出现食物的变量/
}food;/食物的结构体/
struct Snake
{
int x[N];
int y[N];
int node;/蛇的节数/
int direction;/蛇移动方向/
int life;/ 蛇的生命,0活着,1死亡/
}snake;
void Init(void);/图形驱动/
void Close(void);/图形结束/
void DrawK(void);/开始画面/
void GameOver(void);/结束游戏/
void GamePlay(void);/玩游戏具体过程/
void PrScore(void);/输出成绩/
/主函数/
void main(void)
{
Init();/图形驱动/
DrawK();/开始画面/
GamePlay();/玩游戏具体过程/
Close();/图形结束/
}
/图形驱动/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙/
void DrawK(void)
{
/setbkcolor(LIGHTGREEN);/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/设置线型/
for(i=50;i<=600;i+=10)/画围墙/
{
rectangle(i,40,i+10,49); /上边/
rectangle(i,451,i+10,460);/下边/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /左边/
rectangle(601,i,610,i+10);/右边/
}
}
/玩游戏具体过程/
void GamePlay(void)
{
randomize();/随机数发生器/
foodyes=1;/1表示需要出现新食物,0表示已经存在食物/
snakelife=0;/活着/
snakedirection=1;/方向往右/
snakex[0]=100;snakey[0]=100;/蛇头/
snakex[1]=110;snakey[1]=100;
snakenode=2;/节数/
PrScore();/输出得分/
while(1)/可以重复玩游戏,压ESC键结束/
{
while(!kbhit())/在没有按键的情况下,蛇自己移动身体/
{
if(foodyes==1)/需要出现新食物/
{
foodx=rand()%400+60;
foody=rand()%350+60;
while(foodx%10!=0)/食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/
foodx++;
while(foody%10!=0)
foody++;
foodyes=0;/画面上有食物了/
}
if(foodyes==0)/画面上有食物了就要显示/
{
setcolor(GREEN);
rectangle(foodx,foody,foodx+10,foody-10);
}
for(i=snakenode-1;i>0;i--)/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/
{
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
/1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/
switch(snakedirection)
{
case 1:snakex[0]+=10;break;
case 2: snakex[0]-=10;break;
case 3: snakey[0]-=10;break;
case 4: snakey[0]+=10;break;
}
for(i=3;i<snakenode;i++)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/
{
if(snakex[i]==snakex[0]&&snakey[i]==snakey[0])
{
GameOver();/显示失败/
snakelife=1;
break;
}
}
if(snakex[0]<55||snakex[0]>595||snakey[0]<55||
snakey[0]>455)/蛇是否撞到墙壁/
{
GameOver();/本次游戏结束/
snakelife=1; /蛇死/
}
if(snakelife==1)/以上两种判断以后,如果蛇死就跳出内循环,重新开始/
break;
if(snakex[0]==foodx&&snakey[0]==foody)/吃到食物以后/
{
setcolor(0);/把画面上的食物东西去掉/
rectangle(foodx,foody,foodx+10,foody-10);
snakex[snakenode]=-20;snakey[snakenode]=-20;
/新的一节先放在看不见的位置,下次循环就取前一节的位置/
snakenode++;/蛇的身体长一节/
foodyes=1;/画面上需要出现新的食物/
score+=10;
PrScore();/输出新得分/
}
setcolor(4);/画出蛇/
for(i=0;i<snakenode;i++)
rectangle(snakex[i],snakey[i],snakex[i]+10,
snakey[i]-10);
delay(gamespeed);
setcolor(0);/用黑色去除蛇的的最后一节/
rectangle(snakex[snakenode-1],snakey[snakenode-1],
snakex[snakenode-1]+10,snakey[snakenode-1]-10);
} /endwhile(!kbhit)/
if(snakelife==1)/如果蛇死就跳出循环/
break;
key=bioskey(0);/接收按键/
if(key==ESC)/按ESC键退出/
break;
else
if(key==UP&&snakedirection!=4)
/判断是否往相反的方向移动/
snakedirection=3;
else
if(key==RIGHT&&snakedirection!=2)
snakedirection=1;
else
if(key==LEFT&&snakedirection!=1)
snakedirection=2;
else
if(key==DOWN&&snakedirection!=3)
snakedirection=4;
}/endwhile(1)/
}
/游戏结束/
36调试问题及解决方法
将已改好的程序复制到Turbo C时,由于软件的内容过多会出现右移,以致大部分的内容无法复制到Turbo C的界面上,最后导致软件无法运行。解决方法:在改程序时应该把格式设置好,注意左对齐,同时一行的语句尽量的短,最好是一个语句占一行。
在将程序输入到TC中,对源程序进行编译、运行,发现程序存在的多处错误, 如下图所示:
可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。
37调试结果
1 下图为程序调试编译结果:
2下图为程序调试运行结果(即贪吃蛇游戏界面)
4设计心得体会
经过短短两星期的计算机软件技术实习,让我对C程序有了一个更深的了解,以前总认为C语言很枯燥,认为那些我们所设计的程序没有什么用处,但现在通过设计贪吃蛇游戏这个程序使我懂得了如何将所学的知识运用于生活当中。虽然在刚开始设计程序时不太明白如何去设计这程序,但当我看完《C语言课程设计案例精编》并用C语言做出这个贪吃蛇程序后,让我深深感受到C程序的神奇。
在设计这个程序中我主要学会了如何运用以下有关C语言的知识
1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序
十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增
加了程序的可读性。
2) 分析函数先从main()函数入手。Main()函数是C源程序编译时的开始,
从main()函数开始读函数可将其他函数的功能理解得更透彻。
3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出
来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。
4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行
处理的函数,起功能我都有所了解。
同时我也获得了许多宝贵的经验:
1) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解,
知道所设计的题目和内容包含那些资源。
2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路
和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。
3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改
进”是程序设计的必经之路,发现错误也是取得成绩的一种。
4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而
应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
5、参考文献
1郭翠英,《C语言课程设计案例精编》,中国水利水电出版社,20043
2徐金梧,杨德斌等,《TURBO C实用大全》,机械工程出版社,19965
3李丽娟 《C语言程序设计教程》 人民邮电出版社
4林华聪 《C语言程序设计思想与实践》 冶金工业出版社
5张继温 《C语言程序设计教程》 高等教育出版社
6 潘云鹤,董金祥等著.计算机图形学——原理、方法及应用.北京:高等教育出版社,200312
7 孙家广等,计算机图形学(第三版),清华大学出版社,2004
8 陈元琰编著.计算机图形学实用技术.北京:科学出版社,2000
9和青芳著.计算机图形学原理及算法教程.北京:清华大学出版社
10 陆润民C语言绘图教程北京:清华大学出版社,1996
下面是源代码:
Form1:
Private Sub Form_Load() Dim temp As Integer Randomize
temp = Int(Rnd 3) + 1
Form1Picture = LoadPicture("C:\Users\Administrator\Desktop\打地鼠\picture" & temp & "jpg") WindowsMediaPlayer1URL = "C:\Users\Administrator\Desktop\打地鼠\Heaven's Devilswma" End Sub
Private Sub Label1_Click() Form2Show Form2num = -1 Form1Hide
WindowsMediaPlayer1URL = ""
Open "C:\Users\Administrator\Desktop\打地鼠\primarydat" For Append As #1 '写 *** 作 Close #1
Open "C:\Users\Administrator\Desktop\打地鼠\intermediatedat" For Append As #2 Close #2
Open "C:\Users\Administrator\Desktop\打地鼠\advanceddat" For Append As #3 Close #3 End Sub
Private Sub Label2_Click() End End Sub
Form2:
Dim allnum As Integer, oknum As Integer '定义变化次数 打中次数 Public num As Integer '判别是否第一次开始游戏 Dim flags1 As Boolean '判别文件是否保存 Public flags As Boolean '判别是否播放声音 Private Sub countine_Click() pauseEnabled = True Timer1Enabled = True countineEnabled = False WLXZEnabled = True End Sub
Private Sub exit_Click() Dim X As Integer Dim tt As Integer
X = MsgBox("是否真的退出?", vbYesNo, "退出游戏框")
If X = 6 Then
tt = MsgBox("退出游戏之前,是否保存", vbYesNo, "保存提示") If tt = 6 Then
If flags1 = True Then End Else
If Timer1Interval = 1000 Then
Open "C:\Users\Administrator\Desktop\打地鼠\primarydat" For Append As #1 '写 *** 作
Print #1, Text1Text + " " + Format(Date, "M/d/yy") Close #1
ElseIf Timer1Interval = 500 Then
Open "C:\Users\Administrator\Desktop\打地鼠\intermediatedat" For Append As #2
Print #2, Text1Text + " " + Format(Date, "M/d/yy") Close #2 Else
Open "C:\Users\Administrator\Desktop\打地鼠\advanceddat" For Append As #3
Print #3, Text1Text + " " + Format(Date, "M/d/yy") Close #3 End If End If End If End End If End Sub
Private Sub Form_Load() Form4Check1Value = 1
WindowsMediaPlayer1Controlsstop countineEnabled = False pauseEnabled = False WLXZEnabled = False
Form5Top = Form2Top + 700 Form5Left = Form2Left flags1 = False flags = True End Sub
Private Sub help_Click() Form3Show End Sub
Private Sub new_game_Click() num = num + 1 Dim t As Integer
If (num > 0) Then
t = MsgBox("新游戏开始之前,是否保存", vbYesNo, "保存提示") If t = 6 Then
flags1 = True
If Timer1Interval = 1000 Then
Open "C:\Users\Administrator\Desktop\打地鼠\primarydat" For Append As #1 '写 *** 作
Print #1, Text1Text + " " + Format(Date, "M/d/yy") Close #1
ElseIf Timer1Interval = 500 Then
Open "C:\Users\Administrator\Desktop\打地鼠\intermediatedat" For Append As #2
Print #2, Text1Text + " " + Format(Date, "M/d/yy") Close #2 Else
Open "C:\Users\Administrator\Desktop\打地鼠\advanceddat" For Append As #3
Print #3, Text1Text + " " + Format(Date, "M/d/yy") Close #3 End If End If End If
Call Form_Load
allnum = 0 '变化次数初始为0 oknum = 0 '打中次数初始为0 Timer1Enabled = True pauseEnabled = True WLXZEnabled = True End Sub
Private Sub options_Click() Timer1Enabled = False Form4Show
WLXZEnabled = False countineEnabled = True End Sub
Private Sub pause_Click() Dim r, g, b As Integer Timer1Enabled = False countineEnabled = True pauseEnabled = False WLXZEnabled = False
Form5Top = Form2Top + 700 Form5Left = Form2Left Form5Show
#include <stdlibh>
#include <timeh>
#include <conioh>
//
/ 地图状态约定 /
/ 0 : 周围9个格子都没有雷 /
/ 1~8: 周围9个格子有1~8个雷 /
/ -1 : 有雷的格子 /
/ -2 : 被翻开的有雷的格子 /
/ -3 : 地图边界 /
//
int Map[12][12]={0}; / 当前在玩的雷图 /
int MapShow[12][12]={0}; / 当前用户选择过的地方,即“已翻开”的格子 /
int nSpaceLeft = 100; / 剩余的空白数,如果为0,则任务成功! /
int lastX,lastY; / 失败时,记录挖到雷的位置 /
int AllMaps[5][12][12]={0}; / 供用户选择的五张雷图 /
/ 显示雷区(每次用户 *** 作之后都要重新显示) /
void DrawMap();
/ 初始化雷区 /
void InitMap();
/ 游戏开始时,加载用户选择的一幅雷图 /
void LoadMap(int index);
/ 玩扫雷游戏 /
int Play();
/ 绘制主菜单 /
void DrawMainMenu();
/ 显示结果 /
void ShowResult(int result);
/ 主函数 /
int main(int argc, char argv[])
{
char ch;
int result;
srand(time(NULL)); / 按当前时间初始化随机数,这样每次启动的时候,雷的位置的不一样 /
InitMap(); / 初始化5张雷图,供用户选择 /
while(1) / 用while循环,保证只有在用户选择退出时,才退出游戏 /
{
DrawMainMenu(); / 绘制主菜单 /
flushall(); / 清空所有输入输出缓冲区,主要是清空输入缓冲区,防止前面的输入对getch()的干扰 /
ch = getch(); / 读取输入 /
switch(ch)
{
case '1': / 用户选择1 /
printf("\n\t请输入雷图编号(1-5):");
while (1) / 循环输入,如果输入错误就一直要求输入 /
{
flushall();
ch = getch(); / 读取用户输入的雷图编号 /
if (ch >= '1' && ch <= '5') / 只有在1-5之间有效 /
{
LoadMap(ch-'1'); / ch -'1',将用户输入转换为雷图下标(下标从0开始,所以是-'1')/
break; / 如果输入正确,就退出循环输入 /
}
else
{
/ 输入错误,则提示重新输入 /
printf("\n\t输入无效!请重新输入雷图编号(1-5):");
flushall();
}
}
result = Play(); / 开始玩扫雷游戏 /
ShowResult(result); / 显示游戏结果 /
break;
case '2': / 用户选择2 /
exit(0); / 直接退出 /
break;
default: / 无效输入 /
/ 不做任何 *** 作,重新显示主菜单 /
break;
}
}
return 0;
}
void LoadMap(int index)
{
int i,j;
nSpaceLeft = 90;
for(i=0;i<12;i++)
for(j=0;j<12;j++)
{
Map[i][j] = AllMaps[index][i][j]; / 将5张雷图中的下标为index的那一张载入到Map数组 /
MapShow[i][j] = 0; / 重新开始游戏,所以所有格子都是“未翻开”状态 /
}
}
void InitMap()
{
int i,j,k;
int m,n;
/ 要初始化5张地图 /
for(k=0;k<5;k++)
{
/ 初始化地图的边界 /
for(i=0;i<12;i++)
{
/ 下标为0和11的位置都是“边界”,这些位置不属于雷区,仅在程序内部使用 /
AllMaps[k][0][i] = -3;
AllMaps[k][11][i] = -3;
AllMaps[k][i][0] = -3;
AllMaps[k][i][11] = -3;
}
/ 先初始化10个雷的位置 /
for(i=0;i<10;i++)
{
m = rand()%10 + 1; / 随机选一个X坐标 /
n = rand()%10 + 1; / 随机选一个Y坐标 /
if(AllMaps[k][m][n] == 0) / 如果随机产生的位置之前没有被安排放置雷 /
{
AllMaps[k][m][n] = -1; / 放置一个雷 /
}
else / 随机产生的位置在之前已经放置了雷了 /
{
i--; / 这个位置无效,重新产生一个 /
}
}
/ 计算每个格子周围雷的个数 /
for(i=1; i<11; i++)
for(j=1; j<11;j++)
{
if(AllMaps[k][i][j] != -1)
{
AllMaps[k][i][j] = 0;
/ 周围的8个位置,有一个雷就加一 /
//
/ 坐标[i][j]周围的8个坐标位置: /
/ [i-1][j-1] [i-1][j] [i-1][j+1] /
/ [i][j-1] [i][j] [i][j+1] /
/ [i+1][j-1] [i+1][j] [i+1][j+1] /
//
if(AllMaps[k][i-1][j-1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i-1][j] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i-1][j+1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i][j-1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i][j+1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i+1][j-1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i+1][j] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i+1][j+1] == -1)
AllMaps[k][i][j]++;
}
}
}
}
void DrawMap()
{
int i,j;
system("cls"); / 清屏 /
/ 绘制坐标和边框 /
printf("\n\n\n");
printf("\t Y ");
for(i=1; i<11; i++) printf("%-02d",i-1);
printf("\n\tX |###################|\n");
/ 每一行按规则绘制雷区 /
for(i=1; i<11; i++)
{
printf("\t%-02d|",i-1); / 显示X坐标 /
for(j=1; j<11; j++)
{
if(MapShow[i][j]) / 如果该位置被用户“挖开”了,就照实显示 /
{
if (Map[i][j] >= 0) / 非雷,显示周围雷的个数 /
{
printf("%d|",Map[i][j]);
}
/else if(Map[i][j] == 0)
{
printf("0|");
}/
else if (Map[i][j] == -1) / 雷,显示 /
{
printf("|");
}
else if (Map[i][j] == -2) / 用户挖到的雷,显示@ /
{
printf("@|");
}
else / 其他情况(目前不会出现,方便以后扩展) /
{
printf(" |");
}
}
else / 如果该位置没有被用户“挖开”,则显示空格 /
{
printf(" |");
}
}
printf("\n");
}
printf("\t |###################|\n");
}
void DrawMainMenu()
{
system("cls");
printf("\n\n\n\n\n\n");
printf("\t|###################|\n");
printf("\t| 请选择! |\n");
printf("\t| 1 开始扫雷 |\n");
printf("\t| 2 退出 |\n");
printf("\t|###################|\n");
}
int Play()
{
char chX,chY; / 用户输入 /
int X,Y; / 用户输入转换为整数下标 /
int i,j;
while (1)
{
DrawMap(); / 重新绘制雷区图 /
/ 输入X坐标 /
printf("\n\t请输入X:");
flushall();
while(1)
{
chX = getch();
if (chX >= '0' && chX <= '9')
{
X = chX - '0' + 1;
break;
}
else
{
printf("\n\t输入无效!请重新输入X:");
flushall();
}
}
/ 输入Y坐标 /
printf("\n\t请输入Y:");
flushall();
while(1)
{
chY = getch();
if (chY >= '0' && chY <= '9')
{
Y = chY - '0' + 1;
break;
}
else
{
printf("\n\t输入无效!请重新输入Y:");
flushall();
}
}
if(MapShow[X][Y] == 0) / 输入的是未翻开的位置 /
{
MapShow[X][Y] = 1; / 将该位置标记为“已翻开” /
if(Map[X][Y] == -1) / 如果挖到的是雷 /
{
Map[X][Y] = -2; / 标记为-2,表示这是被用户挖到的雷 /
for(i=1;i<11;i++)
for(j=1;j<11;j++)
MapShow[i][j]=1; / 游戏结束,自动将所有位置“翻开” /
/ 记录用户挖到雷的位置坐标 /
lastX = X-1;
lastY = Y-1;
return 0; / 游戏失败! /
}
else / 如果挖到的不是雷 /
{
nSpaceLeft--; / 剩余空白数减一 /
if(nSpaceLeft==0) / 剩余空白数为0,则表示游戏成功 /
{
return 1; / 游戏胜利! /
}
}
}
else / 输入的是已翻开的位置 /
{
printf("\n\t你输入的位置是[%d,%d]\n\t这个位置已经翻开!请重新输入!\n\t按任意键继续\n",X-1,Y-1);
flushall();
getch();
}
}
}
void ShowResult( int result )
{
DrawMap();
if(result == 1) / 游戏成功 /
{
printf("\n\t恭喜!您完成的扫雷任务!\n\t按任意键继续");
flushall();
getch();
}
else / 游戏失败 /
{
printf("\n\t哈哈!您在位置[%d,%d]挖到雷了,任务失败!\n\t按任意键继续",lastX, lastY);
flushall();
getch();
}
}
可以参考c++语言的,大同小异。
class GuessNumber{
const int MaxNumber;
public:
GuessNumber(int mn=4):MaxNumber(mn){
}
struct guessState{
int num;
int pos;
guessState(){
num=0;
pos=0;
}
};
void Run()
{
Menu();
string gen=GenNum();
string guess;
guessState gs;
do{
cout<<"enter geuss number\n";
guess=GuessNum();
gs=Logical(gen,guess);
cout<<gsnum<<" right number "<<gspos<<" in right pos\n";
}while(gspos!=MaxNumber);
cout<<"you get it\n";
}
void Menu()
{
cout<<"this is the menu\n"
"there are "<<MaxNumber<<" numbers to guess\n";
}
string GenNum()
{
string s(MaxNumber,'0');
for(int i=0;i<MaxNumber;i++)
{
s[i]=rand()%10+'0';
}
return s;
}
string GuessNum()
{
string s;
cin>>s;
return s;
}
guessState &Logical(const string& gened,const string &guessed)
{
guessState gs;
for(int i=0;i<guessedsize();i++)
{
for(int j=0;j<genedsize();j++)
{
if(guessed[i]==gened[j])
{
gsnum++;
if(guessed[i]==gened[i])
gspos++;
}
}
}
return gs;
}
};
int main()
{
GuessNumber gn;
gnRun();
return 0;
}
我简单做了以下代码,可以直接保存为htm文件。
我在 IE 及 FireFox 下测试通过。
<html>
<script language="javascript">
var str1 = "";
var str2 = "";
var str3 = "";
var str4 = "";
var real_answer = "";
var C_TIMES = 10;
var guess_times;
function funcInit(){
while(real_answer==""){
str1 = funcR()+"";
str2 = funcR()+"";
str3 = funcR()+"";
str4 = funcR()+"";
real_answer = str1 + str2 + str3 + str4;
}
guess_times = C_TIMES;
documentgetElementById("real_answer")innerHTML = guess_times + " times";
documentgetElementById("res")innerHTML = "";
documentgetElementById("btn_ok")styledisplay = "";
documentgetElementById("btn_restart")styledisplay = "none";
documentgetElementsByName("answer")[0]value="";
}
function funcR()
{
return Mathround((Mathrandom()100))%10;
}
function isExist(strSrc,strDes){
var k=0;
for(i=0;i<strDeslength;i++)
{
for(j=0;j<strSrclength;j++)
{
if(strDessubstr(i,1)==strSrcsubstr(j,1))
{
k++;
}
}
}
if(k==0)
{
return false;
}
return true;
}
function funcChkNum(str)
{
var strTem = "0123456789";
var k=0;
for(i=0;i<strlength;i++)
{
for(j=0;j<strTemlength;j++)
{
if(strsubstr(i,1)==strTemsubstr(j,1))
{
k++;
}
}
}
if(k!=strlength)
{
return false;
}
return true;
}
function funcCheck(instr){
var tem1 = instrsubstr(0,1);
var tem2 = instrsubstr(1,1);
var tem3 = instrsubstr(2,1);
var tem4 = instrsubstr(3,1);
var A = 0;
var B = 0;
var res = "";
if(tem1==str1) A++;
if(tem2==str2) A++;
if(tem3==str3) A++;
if(tem4==str4) A++;
if(isExist(real_answer,tem1)){
B++;
}
if(isExist(real_answer,tem2)){
B++;
}
if(isExist(real_answer,tem3)){
B++;
}
if(isExist(real_answer,tem4)){
B++;
}
res = A + "A" + B + "B";
if(A==4 && B==4){
documentgetElementById("real_answer")innerHTML = "Great, you got it!";
documentgetElementById("btn_ok")styledisplay = "none";
documentgetElementById("btn_restart")styledisplay = "";
real_answer = "";
}
documentgetElementById("res")innerHTML = res;
}
function funcGuess(){
var instr = documentgetElementsByName("answer")[0];
if(!funcChkNum(instrvalue) || instrvalue=="")
{
alert("Enter Numeric !");
instrvalue = "";
return;
}
guess_times--;
if(guess_times<=0){
documentgetElementById("real_answer")innerHTML = "It's " + real_answer;
documentgetElementById("btn_ok")styledisplay = "none";
documentgetElementById("btn_restart")styledisplay = "";
real_answer = "";
}else{
documentgetElementById("real_answer")innerHTML = guess_times + " times";
}
funcCheck(instrvalue);
}
</script>
<body onload="funcInit();">
<center>
<span id="res"></span>
<br>
<span id="real_answer"></span>
<br>
<input type="text" maxlength ="4" size="4" name="answer">
<span id="btn_ok"><input type="button" value=" ok " onclick="funcGuess();"></span>
<span id="btn_restart"><input type="button" value=" restart " onclick="funcInit();"></span>
</center>
</body>
</html>
以上就是关于求设计一个程序,24点游戏 游戏规则:从键盘输入任意1-13的4个数,然后用算术运算符“+、-、*全部的内容,包括:求设计一个程序,24点游戏 游戏规则:从键盘输入任意1-13的4个数,然后用算术运算符“+、-、*、怎么在编程软件上制作一个关于防艾的小游戏、设计一个C语言程序 猜数游戏 规则:电脑随机产生一个1-100的随机数让玩家猜,猜不对则告诉玩家猜等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)