msp430单片机实现猜数字游戏
猜数字游戏源代码

猜数字游戏本案例知识要点●Visual C++ 6.0下创建Win32 Console Application并运行的方法●C++程序中类的定义和实现●C++程序中类文件的引用及类的实例化一、案例需求1.案例描述由计算机产生0到99的随机数,游戏参加者将猜到的数字从键盘输入,计算机对猜数结果进行判断直到猜出正确结果。
2.案例效果图猜数字游戏运行效果如图2-1所示。
3.功能要求(1)所猜0到99的目标数字由计算随机产生。
(2)0到99的随机数的产生、所猜数字和目标数字的比较等过程以类的形式实现。
(3)若游戏参加者所猜数字正确,则提示所猜总次数;若猜数错误,则提示所猜数字比目标数字大还是小。
二、案例分析本案例中设计了一个Guess类,实现产生随机数、进行参加游戏者输入数字与目标数字的比较、计算猜数次数。
主程序中通过类的实例化实现猜数过程。
三、案例设计为了实现猜数过程,设计Guess类,结构如图2-2所示。
●数据成员int Value产生的0到99间的目标数字。
int CompareTimes为游戏者已猜次数。
●函数成员Guess()构造函数,用来产生随机目标数字。
int Compare(int InputValue)用来判断游戏者所猜数字是否正确,其参数InputValue为游戏者所猜数字。
int GetCompareTimes()用来获得游戏者已猜次数。
五、案例实现猜数字游戏源程序代码如下所示。
************************************* // * Guess.h 类声明头文件************************************* #1. #include <time.h>#2. class Guess#3. {#4. private:#5.int Value; //计算机产生的目标数字#6. int CompareTimes; //所猜次数#7. public:#8. Guess(); //构造函数的声明#9. int Compare(int InputValue); #10. int GetCompareTimes();#11. };#12. Guess:: Guess ()//构造函数的实现#13. {#14. CompareTimes=0; //猜数次数置零#15. srand((unsigned)time(NULL)); //产生随机数种子#16. Value=rand()%100;//产生0~99的随机数#17. }#18.int Guess::Compare(int InputValue)//比较猜数是否正确#19. {#20. CompareTimes++; //所猜次数加1 #21. return InputValue-Value;//比较所猜数字和目标数字是否相同,相同//返回0#22. }#23. int Guess::GetCompareTimes()//获得已猜次数#24. {#25. return CompareTimes;#26. }//************************************* //* GuessNumber.cpp 源文件************************************* #1. #include <iostream>#2. #include "Guess.h"//将已定义的类文件包含到主程序文件中#3. using namespace std;#4. int main()#5. {#6. int InputValue;#7.cout<<"\n** 欢迎使用本程序**\n"; #8. for(;;)#9. {#10. char Select;#11. Guess guessobj;//实例化Guess类#12. cout<<"我已经想好数字啦(0~99),请猜吧!\n";#13. for(;;)#14. {#15. int CompareResult; #16. cout<<"\n我想的是:";#17. cin>>InputValue;//获得游戏者输入的所猜数字#18. CompareResult=pare (InputValue);//判断游戏者所猜数字是否正确#19. if(CompareResult==0) //正确#20. {#21. int GuessTimes=guessobj.GetCompareTimes(); #22. cout<<"\n恭喜您,猜对啦!"<<endl <<"您一共猜了"<<GuessTimes<<"次"<<endl;#23. break;#24. }#25. else if(CompareResult>0)#26. {#27. cout<<"\n对不起,您猜的数大啦!\n";#28. }#29. else#30. {#31. cout<<"\n对不起,您猜的数小啦!\n";#32. }#33. }#34. cout<<"\n您还想再玩吗?('n'=No,Others=Yes)\n";#35. cin>>Select;#36. cout<<'\n';#37. if(Select=='n'||Select=='N')#38. {#39. break;#40. }#41. }#42. cout<<"********** 感谢您的使用! **********\n";#43. return 0;#44. }六、案例总结与提高1.案例总结(1)本案例的重点是介绍Visual C++ 6.0下创建并运行一个C++Win32控制台应用程序的基本过程。
用Python编写一个猜数字游戏

用Python编写一个猜数字游戏猜数字游戏是一种经典的游戏,通过猜测数字来猜出正确答案。
在这个游戏中,我们将使用Python语言来编写一个简单的猜数字游戏。
首先,我们需要定义一个生成随机数的函数。
Python中的random 库中的randint()函数可以帮助我们实现这一功能。
代码如下:```pythonimport randomdef generate_random_number():return random.randint(1, 100)```接下来,我们需要编写主游戏循环。
在游戏的开始,我们会随机生成一个数字,并让玩家进行猜测。
玩家每次猜测后,我们都会给出相应的提示,告诉玩家猜的数字是太大还是太小。
直到玩家猜中答案,游戏结束。
代码如下:```pythondef play_game():random_number = generate_random_number()guess = 0guesses_taken = 0while guess != random_number:guess = int(input("请输入一个数字:"))guesses_taken += 1if guess < random_number:print("太小了!")elif guess > random_number:print("太大了!")else:print("恭喜你猜对了!")print("你猜了", guesses_taken, "次。
")play_game()```以上代码定义了一个play_game()函数,它包含了游戏的主要逻辑。
在这个函数内部,我们使用了一个while循环来不断接收用户的猜测,直到猜中为止。
每次循环,我们都会判断用户猜的数字与生成的随机数之间的关系,并给出相应的提示。
msp430单片机实现猜数字游戏

Msp430猜数字游戏设计设计任务:1.先以一组四位数字为原版;2.游戏参与者依次输入所猜测的四位数字,单片机根据所说入的四位数字,进行提示xAyb,x为数字位置都正确的个数,y为数字正确位置不正确的个数;3.设置按键显示正确结果。
设计方案:根据第一个实验设计进行改变,在其基础上添加比较compare()子函数,运行时调用次子函数进行比较。
之后显示结果。
设计目的:体验单片机的趣味性。
程序代码:#include <msp430x14x.h>#define uchar unsigned char#define uint unsigned intunsigned char yuanshu[4]={9,4,7,3}; //设置原数组//unsigned char leddata[27] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8f,0xbf,0x89,0xb9 ,0xff,0x86,0xaf,0xcf,0xc7,0x91,0x8c};unsigned char time[8] = {0,10,0,11,0,0,0,0};//初始数码管unsigned char getkey(void);unsigned int qiushu();long compare();void qingping(void);void fenjie();void delay(unsigned int asdf){for(uint asd=0;asd<asdf;asd++);};/*************************主函数************************/ void main(void){uchar flag=0,i=9;WDTCTL = WDTPW + WDTHOLD; //关闭看门狗P5DIR|=BIT7;P5OUT&=~BIT7;P4DIR=0xff;P2DIR=0xff;P1DIR=0x0F;P1OUT=0xff;while(1){ long p,q,r;i=getkey();if(i<10){time[4]=time[5];time[5]=time[6];time[6]=time[7];time[7]=i;}else {switch(i){case 12:time[4]=yuanshu[0]; //显示原数 time[5]=yuanshu[1];time[6]=yuanshu[2];time[7]=yuanshu[3];break;case 13:time[0]=17;p=qiushu();qingping();flag=13;break;case 14:time[0]=18;p=qiushu();qingping();flag=14;break;case 15:time[0]=19;p=qiushu();qingping();flag=15;break;case 10: time[0] = 5; //显示silly pig time[1] = 1;time[2] = 24;time[3] = 24;time[4] = 25;time[5] = 26;time[6] = 1;time[7] = 9;break;case 11:{q=compare(); //调用compare函数 p=q/10%10;r=q%10;time[0]=p;time[2]=r;break;if((r>9999)||(r<0)) {qingping();time[5]=21;time[6]=21;time[7]=22;}else fenjie(r);}break;}}for(uchar j=0;j<=7;j++) //显示{P4OUT=0x80>>j;P2OUT=leddata[time[j]];delay(200);}}}//end of mainlong compare() //添加比较compare()子函数{uchar i,j,a=0,b=0,x,s;for(i=4;i<=7;i++){if(yuanshu[i-4]==time[i])a++;}for(i=0;i<=4;i++){for(j=4;j<=7;j++)if(yuanshu[i]==time[j])b++;}s=b-a;x=a*10+s;return(x);}unsigned int qiushu() //转化成相应的十进制整数{unsigned int y;y=time[2]*100000+time[3]*10000+time[4]*1000+time[5]*100+tim e[6]*10+time[7];return y;}void qingping(void) //清除屏幕{unsigned int a;for(a=7;a>1;a--)time[a]=0;}void fenjie(long r) //提取十进制整数各位数值,并显示{time[7]=r%10;time[6]=r/10%10;time[5]=r/100%10;time[4]=r/1000%10; time[3]=r/10000%10; time[2]=r/100000%10; }long factorial(long a) {long x,i;x=a;for(i=1;i<a;i++){x=x*(a-i);}return(x);}uchar getkey(void) //获取键值{uchar z,x=16;P1OUT=0x00;if((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN& BIT4))){delay(10000);if((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN& BIT4))){for(z=0;z<=1;z++){P1OUT=~BIT0;if(!(P1IN&BIT7)){x=3;break;}P1OUT=~BIT0;if(!(P1IN&BIT6))P1OUT=~BIT0;if(!(P1IN&BIT5)) {x=11;break;}P1OUT=~BIT0;if(!(P1IN&BIT4)) {x=15;break;}//line 1P1OUT=~BIT1;if(!(P1IN&BIT7)) {x=2;break;}P1OUT=~BIT1;if(!(P1IN&BIT6)) {x=6;break;}P1OUT=~BIT1;if(!(P1IN&BIT5)) {x=10;break;}if(!(P1IN&BIT4)) {x=14;break;}//line3if(!(P1IN&BIT6)) {x=4; break;}P1OUT=~BIT3;if(!(P1IN&BIT7)) {x=0; break;}P1OUT=~BIT3;if(!(P1IN&BIT5)) {x=8; break;}P1OUT=~BIT3;if(!(P1IN&BIT4)) {x=12; break;}//line 2P1OUT=~BIT2;if(!(P1IN&BIT6)) {x=5; break;}P1OUT=~BIT2;if(!(P1IN&BIT7)) {x=1; break;}P1OUT=~BIT2;if(!(P1IN&BIT5)){x=9; break;}P1OUT=~BIT2;if(!(P1IN&BIT4)){x=13; break;}}while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1 IN&BIT4)))for(uchar j=0;j<=7;j++){P4OUT=0x80>>j;P2OUT=leddata[time[j]];delay(500);}delay(20000);while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1 IN&BIT4)))for(uchar j=0;j<=7;j++){P4OUT=0x80>>j;P2OUT=leddata[time[j]];delay(500); }delay(20000);}}return (x);}。
汇编语言:猜数字游戏的设计与实现

猜数字游戏的设计与实现1 需求说明或问题描述1.1 问题描述程序运行后自动产生一个1~100之间的随机整数,游戏开始,程序根据游戏者输入的数字与所需猜测数字进行比较,并给出响应,游戏者根据程序响应再猜数字,最后得到正确数字。
1.2 需求说明程序应有操作提示,输入和输出,界面追求友好,最好是菜单式的界面。
设计若干用例(测试数据),上级测试程序并分析(评价)所设计的程序。
2 设计说明2.1 简要设计框图如下:2.2 简要分析思想首先通过指令在程序中产生随机数,由键盘输入的数字与其比较,如果大于随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数太小,请重新输入;如果等于随机数,则提示正确;如果输入的数不是十进制数,则直接退出。
3 详细的算法描述3.1随机数的产生通过查找各种资料知,随机数的产生也是一种算法,通过种子数据,计算出不同的随机数。
但,此次试验,我通过对系统当前时间的提取来表示随机数,即用时间中的“秒”来作这个随机数。
指令为:mov ah,2ch ;取系统时间,CH:CL=时间:分钟;DH=秒int 21h3.2 从键盘输入数据如果仅用指令:mov ah,01hInt 21h来从键盘读取数据,则只能取一个字符,即,只能读取一位数字;在试验中通过反复调试,可以对每次输入的数(存放于al中)与“回车”的ASCII比较,如果不是“回车”,则返回继续输入;如果是回车,则跳出,完成数据的输入。
每一次返回继续输入时,原来的al中的数据要以个位加入到bx中,即,bx=bx*10+al;这样可以保证输入的数据不会丢失。
3.3 数据的比较用输入的数据(存放于bx中)与随机数(存放于a中:mov a,dx)比较;如果大于,则输出提示数据太大,请重新输入,并跳转到键盘输入数据指令;如果小于,则输出提示数据太小,请重新输入,并跳转到键盘输入数据指令;如果等于,则提示正确,并结束。
其中,小于跳转用jb;大于跳转用ja;等于用jz。
自制猜数字游戏

自制简易猜数字游戏该小程序是c语言编写,在codeblocks下编译运行完成.主要是对大一下学期学习谭浩强c语言这门课程做一个小小的总结(结合在网上学习到的一些知识),同时为将来要学c语言的各位童鞋们提供一个小小的参考资料, 小弟目前能力有限……大神勿喷哦……转载请注明出处哦。
应该有人会发现这篇文章吧。
以下是代码及说明。
#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#define MAX__X 19#define MAX__Y 40int diff=6;//定义全局变量。
游戏默认猜的次数void gotoxy(int x,int y)//坐标定位{COORD loc;loc.X = y;loc.Y = x;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);}void title(){gotoxy(1,4);puts("The simple number guessing game");gotoxy(2,9);printf("made by 王镛(tom)");}void InitGame()//调整界面大小及颜色{system("mode con cols=42 lines=20");system("color F0");}void drow_wall()//画出边界图案{int i;for(i = 0; i <= MAX__Y; i++){gotoxy(0,i);printf("O");gotoxy(MAX__X,i);printf("O");if(i <= MAX__X){gotoxy(i,0);printf("X");gotoxy(i,MAX__Y);printf("X");}}}int first()//第一屏图案{gotoxy(2,7);printf("============================");gotoxy(3,10);printf("1.start ");gotoxy(5,10);printf("2.Change the difficulty ");gotoxy(7,10);printf("Please choose [ ] ");gotoxy(9,7);printf("============================");gotoxy(11,8);printf("The player have six guesses.");gotoxy(7,25);}int change()//改变难度界面{system("cls");gotoxy(2,7);printf("============================");gotoxy(5,9);printf("Please input a number : ");gotoxy(8,7);printf("============================");gotoxy(9,7);printf("example:");gotoxy(11,7);printf(" 3 means you have 3 guesses.");gotoxy(5,32);scanf("%d",&diff);//此处用以改变全局变量的值即游戏难度}int compare()//自定义比较函数,输入值与系统随机产生值作比较{int a,b,c;srand( (unsigned)time( NULL ) );//系统随机产生一个两位数字及下一行b=rand()%(100-10+1)+10; //产生的数赋给变量bfor(c=0;c<diff;c++) //用c作循环控制变量,游戏做几次比较{gotoxy(7,4);printf("Two bit integer:");gotoxy(10,4);printf("prompt:");gotoxy(17,4);printf("注意:输入除数字以外的键程序将退出");gotoxy(7,21);scanf("%d",&a);if(a>b){gotoxy(12,5);puts("The number is smaller than yours.");}else if(a<b){gotoxy(12,5);puts("The number is bigger than yours.");}else{system("cls");gotoxy(2,7);printf("============================");gotoxy(4,16);printf("YOU WON!!! ");gotoxy(5,13);printf("CONGRATULATION ! ");gotoxy(7,7);printf("============================");Sleep(3000);break;//如果在所限次数之内猜中,则跳出循环继续运行下面的语句。
基于MSP430的游戏开发(贪吃蛇和是男人就下一百层)

uchar a= 0;uchar big=0;uchar big2=0;uchar flg=0;uchar levelcnt=0;uchar dir_last=KEY_RIGHT;void tanchishe();//贪吃蛇实现函数void man();//是男人就下一百层实现函数void gamer(){char jt=36;Set_Draw();jiantou(20,jt,1);drawpicfree(3,0,7,13,*mulu);drawpicfree(2,15,7,28,*menutcs);drawpicfree(2,30,4,43,*menuman);// drawpicfree(2,45,9,58,*mubiao);Delay(50000);Delay(50000);while(1){switch(key()){case 5: if(jt>34)jt-=15;jiantou(20,jt+15,0);jiantou(20,jt,1);Delay(100000);break;case 3: if(jt<32)jt+=15;jiantou(20,jt-15,0);jiantou(20,jt,1);Delay(100000);break;case 9:if(jt==21)goto tcs1;else if(jt==36)goto mn;break;//case 0://goto ;break;}}mn:man();tcs1:tanchishe();}void tanchishe(){int xx=0 ;int yy=0 ;uint speed=22001;Set_Drawq();drawpicfree(0,0,15,63,*SNAKE);track.trackend=3 ;while(1){if(a)LPM3;uint i,j ;keypad.key=key();//----------------------keypad case-----------------------switch(keypad.key){ case 11:{if(speed>1000)speed-=1000;else if(speed>500) speed-=500;break;}case 10:speed+=1000;break;case 7 :if(flag.direction!=KEY_LEFT)flag.direction=KEY_RIGHT ;break ;case 1 ://if(flag.direction!=KEY_RIGHT) flag.direction=KEY_LEFT ;break ;case 5:if(flag.direction!=KEY_DOWN)flag.direction=KEY_UP;break ;case 3:if(flag.direction!=KEY_UP)flag.direction=KEY_DOWN;break ; case 9:{//LCD_INT();//LCD_CLR();Set_Draw();track.trackend=3 ;bean.number=0 ;xx=0 ;yy=0 ;flag.start=1 ;flag.clear=1 ;flag.direction=KEY_LEFT ;flag.gameover=0 ;// speed=2000 ;}break ;case 4:if(flag.start==0){//LCD_INT();//LCD_CLR();Set_Draw();track.trackend=3 ;bean.number=0 ;xx=0 ;yy=0 ;flag.start=1 ;flag.clear=1 ;flag.direction=KEY_RIGHT ;flag.gameover=0 ;// speed=2000 ;}break ;}//---------------------------draw snake-------------------------------------// if(drawcnt>speed)// { //if(flag.direction)// drawRectangle(xx+0,yy+0,xx+3,yy+3,2,0);/////////-----------------------------draw bean begin----------------------------if(bean.number<1){bean.coor[0]=rand()/1024*4 ;bean.coor[1]=rand()/2048*4 ;bean.number=1;levelcnt++;if(levelcnt==15){if(speed>2000)speed-=2000;else if(speed>500) speed-=500;levelcnt=0;flg = 0;WriteCom(0x01); //清屏drawpicfree(0,0,15,63,*sj);while(flg < 8);Set_Draw();}big++;if(big==5)big=0;big2++;if(big2==11)big2=0;}if(flag.start){if(big==3)drawRectangle(bean.coor[0]+0,bean.coor[1]+0,bean.coor[0]+3,bean.coor[1]+3,1,1);else if(big2==10)drawyuan(bean.coor[0]+1,bean.coor[1]+0,bean.coor[0]+1,bean.coor[1]+3,2,1);elsedrawRectangle(bean.coor[0]+0,bean.coor[1]+0,bean.coor[0]+2,bean.coor[1]+2,1,1);}//------------------------------清楚头部---------------------------switch(dir_last){ case KEY_RIGHT :headright(xx,yy+0,0);break ;case KEY_LEFT :headleft(xx,yy+0,0);break ;case KEY_UP :headup(xx,yy,0);break ;case KEY_DOWN :headdown(xx+0,yy,0);break ;}if(flag.direction){switch(flag.direction){case KEY_RIGHT://drawRectangle(xx,yy-2,xx+7,yy+5,4,0);shenx(xx,yy+0,1);break;case KEY_LEFT:// drawRectangle(xx-4,yy-2,xx+3,yy+5,4,0);shenx(xx,yy+0,1);break;case KEY_UP:// drawRectangle(xx-2,yy-5,xx+5,yy+3,4,0);sheny(xx+0,yy,1);break;case KEY_DOWN:// drawRectangle(xx-2,yy,xx+5,yy+7,4,0);sheny(xx+0,yy,1);break;}}//draw snake head//----------------------eat bean------------------------------------------if(xx==bean.coor[0]&&yy==bean.coor[1]){if(big==3)track.trackend+=2;else if(big2==8)track.trackend+=4;else track.trackend++;bean.number--;}else{for(i=0;i<track.trackend-1;i++){if(xx==track.track[i][0]&&yy==track.track[i][1]&&(xx!=0&&yy!=0)){if(flag.gameover==0){Lcd_flash(500,5);drawpicfree(0,0,15,63,*over);flag.direction=KEY_HOLD ;flag.gameover=1 ;flag.start=0 ;}}for(j=0;j<4;j++){track.track[i][j]=track.track[i+1][j];// 后一节获得前一节的坐标}}}//----------------------save snake track--------------------------track.track[track.trackend-1][0]=xx+0 ;track.track[track.trackend-1][1]=yy+0 ;track.track[track.trackend-1][2]=xx+3 ;track.track[track.trackend-1][3]=yy+3 ;//}//---------------------------------------------//drawcnt=0 ;//------------------------move snake----------------------------switch(flag.direction){case KEY_RIGHT :// headright(xx+0,yy+0,0);xx+=4 ;//drawRectangle(xx,yy,xx-1,yy+3,2,0);headright(xx,yy+0,1);break ;case KEY_LEFT :// headleft(xx+4,yy+0,0);xx-=4 ;// drawRectangle(xx+4,yy,xx+7,yy+3,2,0);headleft(xx,yy+0,1);break ;case KEY_UP :// headup(xx,yy,0);yy-=4 ;// drawRectangle(xx,yy+4,xx+3,yy+7,2,0);headup(xx,yy,1);break ;case KEY_DOWN :yy+=4 ;// drawRectangle(xx,yy-4,xx+3,yy-1,2,0);headdown(xx+0,yy,1);break ;}//------------------------------draw bean end----------------------------------------if(track.track[0][0]||track.track[0][1]||track.track[0][2]||track.track[0][3]){if(flag.direction){drawRectangle(track.track[0][0],track.track[0][1],track.track[0][2],track.track[0][3],2,0);if(big!=4&&big2!=9){drawRectangle(track.track[1][0],track.track[1][1],track.track[1][2],track.track[1][3],2,0);if(track.track[1][0]==track.track[2][0]+4){//shenx(track.track[1][0],track.track[1][1],0);tailleft(track.track[1][0],track.track[1][1],1);//drawRectangle(track.track[0][0]+3,track.track[0][1],track.track[0][2]+3,track.track[0][3],2,0);}else if(track.track[2][0]==track.track[1][0]+4){//shenx(track.track[1][0],track.track[1][1],0);tailright(track.track[1][0],track.track[1][1],1);//tailright(track.track[0][0],track.track[0][1],0);}else if(track.track[1][1]==track.track[2][1]+4){//sheny(track.track[1][0],track.track[1][1],0);tailup(track.track[1][0],track.track[1][1],1);//tailup(track.track[0][0],track.track[0][1],0);}else if(track.track[2][1]==track.track[1][1]+4){//sheny(track.track[1][0],track.track[1][1],0);taildown(track.track[1][0],track.track[1][1],1);//taildown(track.track[0][0],track.track[0][1],0);} // clearn(track.track[0][0],track.track[0][1],track.track[0][2],track.track[0][3],0);}}}//clear snake tailif(xx==128)xx=0 ;if(yy==64)yy=0 ;if(flag.direction==KEY_LEFT&&xx==-4)xx=124;if(flag.direction==KEY_UP&&yy==-4)yy=60;//if(xx==252)xx=124 ;// if(yy==252)yy=60 ;if(flag.start==0)flag.direction=KEY_HOLD ;if(flag.clear==1){LCD_CLR();flag.clear=0 ;}dir_last=flag.direction;Delay(speed);}}//*********************** 是男人就下一百层****************************** //*****************************2010.11.5******************************//*******************************by one************************************ //******************************v0.1 beta********************************** void man(){uchar guanstart=1;DCOCTL |= 0X60;uchar mannum=1;uchar life=5;uchar i=0;uchar scocnt=0;uchar guan=0;uint guancnt=0;uint cnt=0;uint score=0;char xx=0,yy=0;uint sban=3,sdown=2;Set_Drawq();ban.number=2;drawpicfree(0,0,15,63,*manface);while(1){if(a)LPM3;keypad.key=key();//**********************************keypadcase************************************switch(keypad.key){ case 11:if(sban>5)speed-=1;break;case 10:sban+=1;break;//***************************************startgame*************************************onecase 9:if(flag.start==0){Set_Draw();score=0;guan=1 ;xx=50 ;yy=0 ;flag.start=1 ;flag.clear=1 ;flag.gameover=0 ;ban.number=2 ;ban.coor[1][0]=rand()%46 +33;;ban.coor[2][0]=rand()%46 +33;ban.coor[1][1]=40 ;ban.coor[2][1]=20 ;drawRectangle(ban.coor[1][0]+0,ban.coor[1][1],ban.coor[1][0]+16,ban.coor[1][1]+2,1,1); drawRectangle(ban.coor[2][0]+0,ban.coor[2][1],ban.coor[2][0]+16,ban.coor[2][1]+2,1,1);drawman(xx,yy,1); }WriteCom(0x01);drawpicfree(0,0,15,63,*manui);drawpicfree(0,18,3,25,*clearnmin);drawnum2(14,18,guan,1);break ;}//***************************************************************************** *******//*******************************************过关重画**********************************if(guanstart==0){// Set_Draw();//score=0;// guan=1 ;xx=50 ;yy=0 ;guanstart=1 ;// flag.clear=1 ;// flag.gameover=0 ;ban.number=2 ;ban.coor[1][0]=rand()%46 +33;;ban.coor[2][0]=rand()%46 +33;ban.coor[1][1]=40 ;ban.coor[2][1]=20 ;drawRectangle(ban.coor[1][0]+0,ban.coor[1][1],ban.coor[1][0]+16,ban.coor[1][1]+2,1,1); drawRectangle(ban.coor[2][0]+0,ban.coor[2][1],ban.coor[2][0]+16,ban.coor[2][1]+2,1,1);drawman(xx,yy,1);WriteCom(0x01);drawpicfree(0,0,15,63,*manui);drawpicfree(0,18,3,25,*clearnmin);drawnum2(14,18,guan,1);}//***************************************************************************** ***//-----------------------------draw ban begin----------------------------if(mannum<1){ xx=rand()%56+33;yy=4;drawman(xx,yy,1);mannum=1;}if(ban.number<3){ban.coor[0][0]=rand()%46 +33;ban.coor[0][1]=62;ban.number=3;drawRectangle(ban.coor[0][0]+0,ban.coor[0][1],ban.coor[0][0]+16,ban.coor[0][1]+2,1,1);}/* big++;if(big==15)big=0;big2++;if(big2==35)big2=0; *///**************************人走动**********************oneswitch(keypad.key){case 1:if(xx>33){ drawman(xx,yy,0);xx-=2;drawman(xx,yy,1);}break;/*if((yy==ban.coor[0][1]-1&&xx>=ban.coor[0][0]&&xx<=ban.coor[0][0]+16)||(yy==ban.coor[1][1]-1&&xx>=ban.coor[1][0]&&xx<=ban.coor[1][0]+16)||(yy==ban.coor[2][1]-1&&xx>=ban.coor[2][0]&&xx<=ban.coor[2]for(i=0;i<3;i++){if(yy==ban.coor[i][1]-4)if(xx>=ban.coor[i][0])if(xx<=ban.coor[i][0]+16){ drawman(xx,yy,0);xx-=2;drawman(xx,yy,1);goto fang1;break;}}drawman(xx,yy,0);xx-=2;drawman(xx,yy,1);}break;fang1: */case 7:if(xx<94){ drawman(xx,yy,0);xx+=2;drawman(xx,yy,1);}break;}/*if((yy==ban.coor[0][1]-1&&xx>=ban.coor[0][0]&&xx<=ban.coor[0][0]+16)||(yy==ban.coor[1][1 ]-1&&xx>=ban.coor[1][0]&&xx<=ban.coor[1][0]+16)||(yy==ban.coor[2][1]-1&&xx>=ban.coor[2 ][0]&&xx<=ban.coor[2]//[0]+16)){for(i=0;i<3;i++){if(yy==ban.coor[i][1]-4)if(xx>=ban.coor[i][0])if(xx<=ban.coor[i][0]+16){ drawman(xx,yy,0);xx+=2;drawman(xx,yy,1);goto fang2;break;}}drawman(xx,yy,0);xx+=2;drawman(xx,yy,1);}break;}fang2:*///*************************************************************//******************************************down*************************onefor(i=0;i<3;i++){if(yy==ban.coor[i][1]-6)if(xx>=ban.coor[i][0])if(xx<=ban.coor[i][0]+16)//if((yy==ban.coor[0][1]-1&&xx>=ban.coor[0][0]&&xx<=ban.coor[0][0]+16)||(yy==ban.coor[1][1]-1&&xx>=ban.coor[1][0]&&xx<=ban.coor[1][0]+16)||(yy==ban.coor[2][1]-1&&xx>=ban.coor[2][0]&&xx<=ban.coor{drawman(xx,yy+2,0);yy=ban.coor[i][1]-6;goto a1;}if(i==2){//if(cnt%sdown==1)drawman(xx,yy,0); yy+=2;}}a1:drawman(xx,yy,1);cnt++;if(cnt==1000)cnt=0;if(cnt%sban==1){ for(i=0;i<3;i++)drawRectangle(ban.coor[i][0]+0,ban.coor[i][1],ban.coor[i][0]+16,ban.coor[i][1]+2,1,0);//if(cnt%sban==1)for(i=0;i<3;i++){ban.coor[i][1]-=2;drawRectangle(ban.coor[i][0]+0,ban.coor[i][1],ban.coor[i][0]+16,ban.coor[i][1]+2,1,1);}for(i=0;i<3;i++){if(yy==ban.coor[i][1]-4)if(xx>=ban.coor[i][0])if(xx<=ban.coor[i][0]+16)yy=ban.coor[i][1]-6;}}//{if(cnt%sdown==1)//yy+=2;}//[2][0]+16)){//if(cnt%sban==1)//yy+=2;}//****************************************************************************/********************************clean and draw ban****************************** for(i=0;i<3;i++){drawRectangle(ban.coor[i][0]+0,ban.coor[i][1]-2,ban.coor[i][0]+16,ban.coor[i][1],1,1);}//***************************************************************************** ***///************************换坐标******************************oneif(ban.coor[2][1]==0){ban.number=2;ban.coor[2][0]=ban.coor[1][0];ban.coor[1][0]=ban.coor[0][0];ban.coor[2][1]=ban.coor[1][1];ban.coor[1][1]=ban.coor[0][1];}//************************************************************one/********************画吃的*************************oneif(ban.coor[0][1]==3){if(big==3){ drawRectangle(ban.coor[0][0]+8,ban.coor[0][1]-6,ban.coor[0][0]+11,ban.coor[0][1]-3,1,0);drawRectangle(ban.coor[0][0]+8,ban.coor[0][1]-4,ban.coor[0][0]+11,ban.coor[0][1]-1,1,1);}else if(big2==10){drawyuan(ban.coor[0][0]+8,ban.coor[0][1]-6,ban.coor[0][0]+11,ban.coor[0][1]-3,2,0);drawyuan(ban.coor[0][0]+8,ban.coor[0][1]-4,ban.coor[0][0]+11,ban.coor[0][1]-1,2,1);}}//*************************************************************///********************************gameover************************************** if(life<1){Lcd_flash(500,5);drawpicfree(0,0,15,63,*over);flag.gameover=1 ;flag.start=0 ;//应该加入显示“您的最终得分为:XXXX,欢迎再次尝试“//goto start;}//***************************************************************************** ****//***********************************score************************************** ******scocnt++;if(yy>64||yy<0){life-=1;mannum=0;}if(scocnt==10){score+=5;guancnt+=1;scocnt=0;drawpicfree(0,54,3,61,*clearnmin);drawnum(2,54,score,1);}if(guancnt==100){guan+=1;guancnt=0;if(sban>1)sban-=1;WriteCom(0x01); //清屏drawpicfree(0,0,15,63,*sj);while(flg < 8);Set_Draw();guanstart=0;mannum=0;}//***************************************************************************** *********//Delay(1000);//********************************边栏显示******************************************//WriteCom(0x01);//WriteCom(0x01);//WriteCom(0x01);drawpicfree(6,18,9,25,*clearnmin);drawnum1(114,18,life,1);//************************************************************************** }}。
简单的猜数字游戏(C语言)

简单的猜数字游戏(C语⾔)猜数字游戏1.系统分析在本游戏中,电脑会给出1~100之间的⼀个随机数,玩家通过键盘输⼊猜测的数字,电脑会判断输⼊的数字是否为⽣成的随机数,并做出相应的提⽰(猜⼤了,猜⼩了,答对了)。
2.概要设计此系统可分为以下⼏个功能模块:菜单模块;随机数⽣成模块;判断及提⽰模块;主函数模块。
3.详细设计3.1 菜单模块void menu(){printf("********************\n");printf("** 1.play 0.exit **\n");printf("********************\n");}3.2 随机数⽣成模块ret=rand()%100+1;//⽣成1~100之间的随机数srand((unsigned int)time(NULL));//拿时间戳来设置随机数的⽣成起始点3.3 判断及提⽰模块while(1){printf("请猜数字:");scanf("%d",&guess);if(guess>ret)printf("猜⼤了\n");else if(guess<ret)printf("猜⼩了\n");else{printf("恭喜你,猜对了!\n");break;}}3.4 主函数模块int main(){int input;srand((unsigned int)time(NULL));//拿时间戳来设置随机数的⽣成起始点do{menu();printf("请选择:");scanf("%d",&input);switch(input){case1:game();break;case0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}}while(input);return0;}4.源程序代码#include<stdio.h>#include<time.h>//time()#include<stdlib.h>//rand();srand()void menu(){printf("********************\n");printf("** 1.play 0.exit **\n");printf("********************\n");}void game(){int ret;int guess;ret=rand()%100+1;//⽣成1~100之间的随机数while(1){printf("请猜数字:");scanf("%d",&guess);if(guess>ret)printf("猜⼤了\n");else if(guess<ret)printf("猜⼩了\n");else{printf("恭喜你,猜对了!\n");break;}}}int main(){int input;srand((unsigned int)time(NULL));//拿时间戳来设置随机数的⽣成起始点do{menu();printf("请选择:");scanf("%d",&input);switch(input){case1:game();break;case0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}}while(input);return0;}。
猜数程序游戏

猜数游戏程序程序说明:这是一个猜数游戏程序,可以判断一个人的反应快慢。
本程序主要是利用时间函数对玩游戏人,猜对某个数所用的时间进行计数,这个数是利用随机函数产生的,如果你猜的数比这个数小,则程序会提示让你输入一个大点的数:please input a little bigger,当你猜的数比这个数大,则程序会提示让你输入一个小点的数:please input a little smaller ,当你猜对了这个数时,则根据你所用的时间给你一个结论:小于15秒:clever;小于25秒:normal;大于25秒:stupid,同时告诉你所猜的数是几。
下面附此程序清单:#include"time.h"#include"stdlib.h"#include"stdio.h"main(){char c;clock_t start,end;time_t a,b;double var;int i,guess;srand(time(NULL));printf("do you want to play it.('y'or 'n')\n");loop:while ((c=getchar())=='y'){i=rand()%100;/*利用随机函数任意产生一个让你猜的数*/printf("\nplease input number you guess:\n");start=clock();/*开始计时*/a=time(NULL);scanf("%d",&guess);/*输入你猜的数*/ while(guess!=i){if(guess>i){printf("please input a little smaller.\n");scanf("%d",&guess);}else{printf("please input a little bigger.\n");scanf("%d",&guess);}}end=clock();/*结束计时*/b=time(NULL);printf("It took you %6.3f seconds\n",var=(double)(end-start)/18 .2);printf("It took you %6.3f seconds\n\n",difftime(b,a));if(var<15)printf("You are very clever!\n\n");else if(var<25)printf("You are very normal!\n\n"); elseprintf("You are very stupid!\n\n");printf(" Congradulations\n\n");printf("The number you guess is %d",i); }printf("\ndo you want to try it again?(\"y\".or.\"n\")\n");if((c=getch())=='y')goto loop;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Msp430猜数字游戏设计设计任务:1.先以一组四位数字为原版;2.游戏参与者依次输入所猜测的四位数字,单片机根据所说入的四位数字,进行提示xAyb,x为数字位置都正确的个数,y为数字正确位置不正确的个数;3.设置按键显示正确结果。
设计方案:根据第一个实验设计进行改变,在其基础上添加比较compare()子函数,运行时调用次子函数进行比较。
之后显示结果。
设计目的:体验单片机的趣味性。
程序代码:#include <msp430x14x.h>#define uchar unsigned char#define uint unsigned intunsigned char yuanshu[4]={9,4,7,3}; //设置原数组//unsigned char leddata[27] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8f,0xbf,0x89,0xb9 ,0xff,0x86,0xaf,0xcf,0xc7,0x91,0x8c};unsigned char time[8] = {0,10,0,11,0,0,0,0};//初始数码管unsigned char getkey(void);unsigned int qiushu();long compare();void qingping(void);void fenjie();void delay(unsigned int asdf){for(uint asd=0;asd<asdf;asd++);};/*************************主函数************************/ void main(void){uchar flag=0,i=9;WDTCTL = WDTPW + WDTHOLD; //关闭看门狗P5DIR|=BIT7;P5OUT&=~BIT7;P4DIR=0xff;P2DIR=0xff;P1DIR=0x0F;P1OUT=0xff;while(1){ long p,q,r;i=getkey();if(i<10){time[4]=time[5];time[5]=time[6];time[6]=time[7];time[7]=i;}else {switch(i){case 12:time[4]=yuanshu[0]; //显示原数 time[5]=yuanshu[1];time[6]=yuanshu[2];time[7]=yuanshu[3];break;case 13:time[0]=17;p=qiushu();qingping();flag=13;break;case 14:time[0]=18;p=qiushu();qingping();flag=14;break;case 15:time[0]=19;p=qiushu();qingping();flag=15;break;case 10: time[0] = 5; //显示silly pig time[1] = 1;time[2] = 24;time[3] = 24;time[4] = 25;time[5] = 26;time[6] = 1;time[7] = 9;break;case 11:{q=compare(); //调用compare函数 p=q/10%10;r=q%10;time[0]=p;time[2]=r;break;if((r>9999)||(r<0)) {qingping();time[5]=21;time[6]=21;time[7]=22;}else fenjie(r);}break;}}for(uchar j=0;j<=7;j++) //显示{P4OUT=0x80>>j;P2OUT=leddata[time[j]];delay(200);}}}//end of mainlong compare() //添加比较compare()子函数{uchar i,j,a=0,b=0,x,s;for(i=4;i<=7;i++){if(yuanshu[i-4]==time[i])a++;}for(i=0;i<=4;i++){for(j=4;j<=7;j++)if(yuanshu[i]==time[j])b++;}s=b-a;x=a*10+s;return(x);}unsigned int qiushu() //转化成相应的十进制整数{unsigned int y;y=time[2]*100000+time[3]*10000+time[4]*1000+time[5]*100+tim e[6]*10+time[7];return y;}void qingping(void) //清除屏幕{unsigned int a;for(a=7;a>1;a--)time[a]=0;}void fenjie(long r) //提取十进制整数各位数值,并显示{time[7]=r%10;time[6]=r/10%10;time[5]=r/100%10;time[4]=r/1000%10; time[3]=r/10000%10; time[2]=r/100000%10; }long factorial(long a) {long x,i;x=a;for(i=1;i<a;i++){x=x*(a-i);}return(x);}uchar getkey(void) //获取键值{uchar z,x=16;P1OUT=0x00;if((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN& BIT4))){delay(10000);if((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN& BIT4))){for(z=0;z<=1;z++){P1OUT=~BIT0;if(!(P1IN&BIT7)){x=3;break;}P1OUT=~BIT0;if(!(P1IN&BIT6))P1OUT=~BIT0;if(!(P1IN&BIT5)) {x=11;break;}P1OUT=~BIT0;if(!(P1IN&BIT4)) {x=15;break;}//line 1P1OUT=~BIT1;if(!(P1IN&BIT7)) {x=2;break;}P1OUT=~BIT1;if(!(P1IN&BIT6)) {x=6;break;}P1OUT=~BIT1;if(!(P1IN&BIT5)) {x=10;break;}if(!(P1IN&BIT4)) {x=14;break;}//line3if(!(P1IN&BIT6)) {x=4; break;}P1OUT=~BIT3;if(!(P1IN&BIT7)) {x=0; break;}P1OUT=~BIT3;if(!(P1IN&BIT5)) {x=8; break;}P1OUT=~BIT3;if(!(P1IN&BIT4)) {x=12; break;}//line 2P1OUT=~BIT2;if(!(P1IN&BIT6)) {x=5; break;}P1OUT=~BIT2;if(!(P1IN&BIT7)) {x=1; break;}P1OUT=~BIT2;if(!(P1IN&BIT5)){x=9; break;}P1OUT=~BIT2;if(!(P1IN&BIT4)){x=13; break;}}while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1 IN&BIT4)))for(uchar j=0;j<=7;j++){P4OUT=0x80>>j;P2OUT=leddata[time[j]];delay(500);}delay(20000);while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1 IN&BIT4)))for(uchar j=0;j<=7;j++){P4OUT=0x80>>j;P2OUT=leddata[time[j]];delay(500); }delay(20000);}}return (x);}。