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语言来编写一个简单的猜数字游戏。

首先,我们需要定义一个生成随机数的函数。

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单片机实现猜数字游戏

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的游戏开发(贪吃蛇和是男人就下一百层)

基于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语言)

简单的猜数字游戏(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;}。

微控制器应用及系统设计

微控制器应用及系统设计

微控制器应用及系统设计课程设计报告姓名柯霞学号0910200203 学院(系) 自动化学院专业自动化标题基于MSP430单片机的猜数拆弹游戏南京理工大学2012 年 4 月目次1 引言 (1)2 系统总体设计 (2)2.1 系统组成结构及工作原理 (2)2.2 系统工作流程 (3)2.3 系统核心器件选型 (4)3 系统硬件设计 (5)3.1 电源模块设计 (5)3.2 LED显示模块设计 (6)3.3 KEY模块设计 (7)4 系统软件设计 (8)4.1 系统软件总体结构及总流程图 (8)4.2 LED显示模块程序设计 (9)4.3 KEY模块程序设计 (10)4.4 温度数据采集模块程序设计 (11)5 系统调试与结果分析 (12)5.1 系统调试步骤 (12)5.2 遇到的问题及解决方案 (13)5.3 实验结果 (14)6 结论与心得体会 (15)参考文献 (16)附录 (17)摘要:本文设计并实现了一款基于MSP430单片机的通过猜数进行拆弹的游戏。

主要讨论了包括LCD、键盘、时钟模块在内的硬件电路的设计和软件编程方案,并在调试通过后将程序下载到开发板上检验其功能的实现。

最终的结果表明,本设计运行稳定,人机界面友好,可较好的实现该款游戏的功能。

关键字:MSP430单片机,猜数游戏,键盘,LCD1 引言随着经济的发展,社会生活节奏进一步加快,越来越多的人希望通过一些轻松的游戏来减轻工作生活的压力,因此游戏在人们休闲娱乐中的地位日益提高。

本设计正是基于这一点,利用MSP430开发板的资源,实现了一款简单轻松的猜数拆弹游戏。

本设计采用的MSP430系列单片机是美国TI 公司推出的一种16位超低功耗、具有精简指令集的混合信号处理器。

该处理器具有处理能力强、运算速度快、超低功耗、片内资源丰富等优点,具有良好的性价比,并且由于采用了串行在线编程方式,为用户编程和控制参数提供灵活的空间。

MSP430F449 具有强大的中断功能及输出、功能选择、中断等多个寄存器,使得功能口和通用I/O口复用。

C语言编程猜数游戏代码

C语言编程猜数游戏代码

一 实现思路1、游戏模块(1)计算机给出四位随机数,要求数字不重复(2)用户从键盘输入四位数,要求与计算机给出的四位数数字和位数均相同(3)每猜一次,提示信息(x ,y ),x 表示位置和数字均相同的个数,y 表示数字相同,位置 不同的个数。

同时,给出得分「基础分1000分,猜错一次-100,猜对+20」(4)h 键作为帮助键,给出更为准确的信息,具体到某个数字是否正确,每使用一次帮助键-100分;k 键作为答案给出键,得分归零,并结束游戏(5)猜对答案后若选择继续游戏将会以你的得分为基础分进行第二轮游戏2、记录模块(1)每次游戏开始之前,将得分最高的前三名显示出来(2)每次游戏结束后,将前三名分值存盘二 流程图三设计细节(1)头文件的说明stdio.h 包含标准输入输出函数定义的头文件stdlib.h 包含最常用系统函数定义的头文件time.h 包含日期和时间函数定义的头文件conio.h包含通过控制台进行数据输入和数据输出函数定义的头文件string.h包含用字符数组函数定义的头文件(2)自定义函数的说明void start():绘制游戏的进入界面intdifferentnumber():判断电脑生成的四位数字是否一样 voidmakenumber():电脑随机产生四位数并存到一个一维数组中voidinputnumber():用户输入一个四位数并把它们分开存入一个数组中void judge():比较两个数组并给出相关提示voidhelph():帮助键hvoid helpk():帮助键kint game():游戏主流程,详见流程图void reclod():记录函数四系统调试出现的问题1、进入judge函数时,没有对初始的*x和*y重新赋值为0,导致x,y的值在做累加,实数对数值偏大。

2、if-else 语句没有在if后加大括号,只执行到if后一条,第二条则不在if语句的管辖范围内,导致if语句出错3、当两个scanf函数连接较密时,应在第二的scanf里加入空格,以清除缓冲区的内容,以便下一次存储数据(如:scanf(” %c”,&ch)4、文件和源代码没有保存在同一地址下,导致打开文件失败5、显示的内容没有看清楚就被清屏函数清屏,在清屏函数前加一个getch()即可五测试数据及测试结果分析图 1 说明游戏规则按任意键开始游戏图 2 输入一个数字给出提示信息和注解图3 按h键获得帮助图4 按k键正确输入密码后可得到答案同时分数归0图5 按k键输入错误密码无法获得答案图 6 猜对后显示分数图7 将成绩与排行榜比较并显示输入y继续游戏输入n结束游戏六总结c语言对于刚接触的学生,会感到很陌生。

C语言代码实现猜数字游戏

C语言代码实现猜数字游戏

C语⾔代码实现猜数字游戏⽬录前⾔:⼀:猜数字游戏基本介绍&对程序预期⼆:程序设计思路1.总体思路:2.菜单部分函数:3.游戏部分函数4.主函数部分5.代码主体三:总结前⾔:本⽂主要讲解以c语⾔编写猜数字游戏,⽬的是介绍C语⾔中的循环和分⽀的具体⽤法。

⼀:猜数字游戏基本介绍&对程序预期.猜数字游戏,顾名思义,就是系统随机给出⼀个数字,玩家对这个数字进⾏猜测,如果玩家猜测的数字⼤于给出的数字,则系统会提⽰猜⼤了,如果玩家猜测的数字⼩于给出的数字,则系统会提⽰猜⼩了,这样逐步缩⼩猜测范围,直到玩家猜对为⽌。

2.程序预期:猜数字结束后,玩家如果猜对了的话可以继续游戏,也可以退出游戏⼆:程序设计思路1.总体思路:⾸先,实现游戏功能必须要有⼀个菜单来提⽰玩家如何进⾏操作。

其次,为了代码具有可读性,可以将游戏部分函数和菜单部分函数作为两个⼦函数,然后在主函数调⽤他们。

然后我们为了实现玩家可以多次游戏可以使⽤循环。

综上所述,我们应该设计两个⼦函数:菜单函数和游戏函数。

⼀个主函数2.菜单部分函数:菜单部分函数void menu(){printf("***********************************************\n");printf("*************************1play*****************\n");printf("*************************0exit*****************\n");printf("***********************************************\n");}菜单函数设计相对简单,只是为了提⽰玩家如何操作3.游戏部分函数void game(){srand((unsigned int)time(NULL));int ret = rand() % 100 + 1;while (1){printf("猜数字\n");int guess = 0;scanf("%d", &guess);if (guess > ret){printf("猜⼤了\n");}else if (guess < ret){printf("猜⼩了\n");}else{printf("猜对了\n");break;}}}①在游戏函数部分,⾸先要⽣成随机数,⽣成随机数的⽅法如下:C语⾔中提供了⽣成随机数的函数rand函数rand函数会返回⼀个0到RAND-MAX的随机整数,使⽤这个函数需要包含头⽂件<stdlib.h>但是rand函数每次⽣成的随机数相同,所以只⽤rand函数不够,所以要使⽤srand()函数增加随机性后⼀句中说明在使⽤rand函数前要定义⼀个srand()函数如画线句所⽰,srand函数的作⽤就是⼀个随机数的⽣成的种⼦。

msp430猜数字游戏

msp430猜数字游戏

/**************************************************************程序功能:猜数字,第一个人输入4位数,然后按K11确定,第二个人接着输入,按K15显示结果,结果显示在数码管前四位,按K12清0,第三个人接着输入,以此后推,输入,看结果,清0.***************************************************************/#include <msp430x14x.h>#include <math.h>#define uint unsigned int#define uchar unsigned charconst uchar segment[19]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb7,0xc8,0x8f,0xbf,0x89,0xb9,0x88,0x83,0x88};uchar static key_flag;uchar static key1;uchar A[4]={0,0,0,0}; //第一次输入的各位数uchar B[4]={0,0,0,0}; //第二次输入的各位数uchar F[8]={0,0,0,0,0,0,0,0}; //存放显示的数long int c=0; //第一次输入的数值long int d=0; //第二次输入的数值int e=0; //存放符号位long int g;/****************键盘初始化函数****************/void int_I_O(void) //扫描键盘p1口及数码管p2,p4,p5口的板上资源初始化(数码管共阳极){P1DIR |=BIT0+BIT1+BIT2+BIT3; // p1.0至p1.3为输出(p1.0至p1.3为键盘的行)P1OUT &=0x00; //p1输出初始化全为0P5DIR |=BIT7; //p5.7输出P5OUT &=~BIT7; //使能UC573SJ芯片,p5.7为锁存器使能端,低电平有效P2DIR |=0XFF; //p2口与阴极接口端有连接,控制p2口能获得想要的显示P4DIR |=0XFF; //p4口与数码管控制端有连接,p4端能控制数码管的熄灭或开启}/****************系统时钟初始化函数****************/void int_clk() //时钟设置为smclk=mclk=xt2clk{uchar i;BCSCTL1&=~XT2OFF; //xt2off=0,打开高频晶振BCSCTL2|=SELM1+SELS;//设置smclk=mclk,并使用高频晶振do{IFG1&=~OFIFG;for(i=0;i<100;i++)_NOP();}while((IFG1&OFIFG)!=0);//直至OFIFG标志位清为0IFG1&=~OFIFG;}/****************timerA初始化函数****************/void int_timer() //smclk为时钟来源,8分频,1MHz,增加模式,10ms来一个中断{TACTL|=TASSEL1+TACLR+ID0+ID1;//smclk为时钟来源,8分频,1MHzTACTL|=MC0+TAIE; //增加模式,并且使能中断TACCR0=9999; //10ms来一个中断}/****************检测键盘有无输入函数****************/void fast_scan() //检测键盘有无输入,没输入key_flag=0,有输入key_flag=1{uchar temp;P1OUT &=0xf0; //p1口低四位清0,高四位不变,temp=P1OUT&0xf0; //p1口为oxf0,没输入,否则有输入if(temp==0xf0)key_flag=0; //没输入key_flag=0,有输入key_flag=1else{key_flag=1;}}/****************行扫描读列值函数****************/uchar scan_key(uchar line) //表示每行扫描一次,判断一下列值{uchar key;P1OUT=line; //接受扫描行,用p1第四位控制,就是其中1位为低位,剩余3位为高位switch(P1IN&0xf0) //p1高四位输入判断第几列,如第一列0111{case 0x70:key=0x01;break; //第一列0x01表示,列为从左往右数case 0xb0:key=0x02;break; //第二列0x02表示case 0xd0:key=0x03;break; //第三列0x03表示case 0xe0:key=0x04;break; //第四列0x04表示default:key=0xff;break;}return(key); //返回列键值}/****************获取键盘数值函数****************/uchar get_key() //对行扫描,读列值的方法获取键盘数值{uchar key;while(1) //一直扫描,直到扫描完为止{ key=scan_key(0x7); //第一行的扫描,从下往上为第一行,将0111给p1的低4位if(key!=0xff){key|=0x10;P1OUT=0x0f;break;} //第一行用0x10key=scan_key(0xb); //第二行的扫描,将1011给p1的低4位if(key!=0xff){key|=0x20;P1OUT=0x0f;break;} //第二行用0x20 key=scan_key(0xd); //第三行的扫描,将1101给p1的低4位if(key!=0xff){key|=0x30;P1OUT=0x0f;break;} //第三行用0x30 key=scan_key(0xe); //第四行的扫描,将1110给p1的低4位if(key!=0xff){key|=0x40;P1OUT=0x0f;break;} //第四行用0x40}switch(key){case 0x11:key=0;break; //第一行第一列键值为0,以后键值往后推case 0x21:key=1;break;case 0x31:key=2;break;case 0x41:key=3;break;case 0x12:key=4;break;case 0x22:key=5;break;case 0x32:key=6;break;case 0x42:key=7;break;case 0x13:key=8;break;case 0x23:key=9;break;case 0x33:key=10;break;case 0x43:key=11;break;case 0x14:key=12;break;case 0x24:key=13;break;case 0x34:key=14;break;case 0x44:key=15;break;}_NOP(); //延时return(key); //返回键盘数值给调用函数}/****************over函数****************/void over(){uchar temp;P1OUT&=0xc0;do{temp=P1IN&0xc0;if(temp==0xc0)break;}while(1);}/****************可调时间的延时函数****************/void delay(t) //延时一段时间{uint i;for(i=0;i<t;i++)_NOP();}/****************延时一段时间函数****************/void delay2(void) //延时一段时间{uint i=0,j=0;for(i=0;i<=200;i++){ for(j=0;j<=300;j++);}}/****************F[i]数码管显示函数****************/uchar display(void) //显示以F[i]为数组内的内容,第二支数码管一直不亮{uchar i;for(i=0;i<8;i++){P2OUT=segment[F[i]];//数码管后六位显示A[i]内容,数码管第一位显示符号P4OUT=0x01<<i; //动态显示符号及数字delay(1300); //调整t值可调整显示闪烁与亮度}return 0;}void shuru(void){int i,j,m;i=0;for(m=0;m<1;m++){fast_scan(); //判断是否有键盘按下,有key_flag=1,无key_flag=0if(key_flag==0) continue;key_flag=0;delay2(); //延时看是否为抖动fast_scan(); //再扫描if(key_flag==1) //有键盘0到9按下,用数组A[i]存放,大于9用变量e存放{key_flag=0; //清键盘标志位do{key1=get_key(); //key1存放键盘数值if(key1<=9){for(j=2;j>=0;j--)F[j+1]=F[j];F[0]=key1;}i++;display();delay2();fast_scan();if(key_flag==0) continue;key_flag=0;delay2();fast_scan();over();delay2();}while(key1<=9&&i<=4);}for(j=0;j<=3;j++)A[j]=F[j];e=key1; //e为符号,e=12为加,e=13为减,e=14为乘,e=15为除//F[7]=e;display();//x显示符号if(e==11){ for(i=0;i<=5;i++)F[i]=0;display();}}}void clear(void){int i,c,m;for(m=0;m<1;m++){fast_scan(); //判断是否有键盘按下,有key_flag=1,无key_flag=0if(key_flag==0) continue;key_flag=0;delay2(); //延时看是否为抖动fast_scan(); //再扫描if(key_flag==1) //有键盘0到9按下,用数组A[i]存放,大于9用变量e存放{ key_flag=0; //清键盘标志c=get_key(); //key1存放键盘数值if(c==12){for(i=0;i<=7;i++)F[i]=0;}}}display();}/****************主函数****************/ void main(void){WDTCTL=WDTPW+WDTHOLD;int i=0;int j;int t=0;int k=0;int q;int m=0;//long int sum;int_clk(); //初始化系统时钟int_timer(); //初始化timer,10ms一次中断int_I_O(); //初始化板上资源设置// shuru();_EINT(); //开系统中中断while(1){if(m<1)shuru();m++;i=0;fast_scan();if(key_flag==0) continue;key_flag=0;delay2();fast_scan();if(key_flag==1){key_flag=0;do{key1=get_key();if(key1<=9){for(j=2;j>=0;j--)F[j+1]=F[j];F[0]=key1;}i++;display();fast_scan();if(key_flag==0) continue;key_flag=0;delay2();fast_scan();over();delay2();}while(key1<=9&&i<=4);}for(j=0;j<=3;j++)B[j]=F[j];g=key1;//F[7]=g;//display();over();delay2();k=0;t=0;if(g==15){for(j=0;j<=3;j++)if(B[j]==A[j]){k++;}F[7]=k;for(i=0;i<=3;i++)for(j=0;j<=3;j++)if(B[j]==A[i]){t++; }q=t-k;F[6]=16;F[5]=q;F[4]=17;display();}clear();}}/****************中断服务函数****************/ #pragma vector=TIMERA1_VECTOR__interrupt void Timer_A(void){switch(TAIV){case 2:break;case 4:break;case 10:display();break; }}。

MSP430单片机课程设计-简单计算器设计

MSP430单片机课程设计-简单计算器设计
2
MSP430 单片机课程设计
unsigned char disbuff[8] = {20,20,0,0,0,0,0,0};//初始数码管 unsigned char getkey(void); unsigned int qiushu(); void clear(void); void zhuanhuan(); void delay(unsigned int j) { for(uint i=0;i<j;i++); } unsigned int qiushu() //转化成相应的十进制整数 {unsigned int y; y=disbuff[2]*100000+disbuff[3]*10000+disbuff[4]*1000+disbuff[5]*100 +disbuff[6]*10+disbuff[7]; return y; } void clear(void) {unsigned int a; for(a=7;a>1;a--) disbuff[a]=0; } //清除屏幕
实验二:猜数字游戏设计
一、目的
利用单片机芯片 MSP430x14x、四位八段共阴数码管,设计一个猜数字游戏, 并将游戏结果显示在数码管上。
二、功能
要求该设计能实现如下的功能:游戏开始后,先在程序内随即设定四个 0-9 之间的不同数,作为游戏数答案。然后用户给出 4 个数,该软件会将您提交的数 与它自动产生的数进行比较,结果在八段数码管上显示成"kAsB"。k 代表位置正 确数字也正确的字数,s 代表数字正确但位置不正确的字数。当 k=4 且 s=0 时, 则比较正确显示“GOOD” ,进行下一次比较。
4
MSP430 单片机课程设计

c语言入门猜数字游戏(解释每行代码)

c语言入门猜数字游戏(解释每行代码)

c语言入门猜数字游戏(解释每行代码)这是一个“猜数字”的小游戏,玩家需要猜出随机生成的数字。

#include <stdio.h> // 1. 引入标准输入输出库#include <stdlib.h> // 2. 引入标准库#include <time.h> // 3. 引入时间相关库int main() { // 4. 主函数开始int num,guess; // 5. 定义两个整型变量: num和guesssrand(time(NULL)); // 6. 初始化随机数种子num = rand() % 100 + 1; // 7. 生成1到100之间的随机整数printf("请猜一个1~100之间的整数:\n"); // 8. 提示玩家输入do { // 9. 进入循环体scanf("%d", &guess); // 10. 接收玩家的输入if (guess > num) { // 11. 判断玩家猜的数是否太大printf("你猜的数字太大了!\n继续猜:\n");} else if (guess < num) { // 12. 判断玩家猜的数是否太小printf("你猜的数字太小了!\n继续猜:\n");}} while (guess != num); // 13. 如果猜错了就继续循环printf("恭喜你,猜对了!\n"); // 14. 玩家猜对了,输出结果return 0; // 15. 返回0表示程序结束}各行代码解释如下:1. 引入`stdio.h`库,提供了输入和输出的函数和符号常量。

2. 引入`stdlib.h`库,提供一些标准函数功能,如内存分配等。

3. 引入`time.h`库,提供了处理时间的函数。

4. `int main()`是程序的起点,主函数开始执行。

计算机技术基础(c语言)课程设计 猜数字游戏

计算机技术基础(c语言)课程设计 猜数字游戏

C语言计算机技术基础课程设计设计报告题目:猜数字游戏题目:猜数字游戏一、选题背景:猜数字是一种开发智力的游戏,在现代社会中越来越流行,现用已学的C语言程序的各种知识练习编写简单的应用的程序来实现游戏的功能。

二、设计思想:该游戏的实现主要用到C语言中的库函数来实现图形界面能并运用各种循环结构和分支结构来实现选择功能,以次完成整个游戏的制作。

三、程序流程图四、程序清单:#include<stdio.h>#include<graphics.h>#include<stdlib.h>#include<bios.h>#include<dos.h>#define up 0x4800#define down 0x5000#define left 0x4b00#define right 0x4d00#define esc 0x11bstatic int kkk=1;int currenti=1;int rpiao[5];int xpiao[5];int com[16];int money=100;void initmu(void){int i;char s[3];char m[5];char n[2];n[0]=157;n[1]=NULL;setcolor(2);rectangle(100,20,500,120); rectangle(90,0,510,130);setcolor(14);rectangle(100,220,500,420);rectangle(90,210,510,430);setfillstyle(9,2);floodfill(91,1,2);setfillstyle(9,14);floodfill(91,211,14);/*编框,大小,位置,颜色*/setcolor(4);for(i=0;i<=14;i++){setcolor(4);rectangle(110+i*25,230,135+i*25,265);itoa(i+1,s,10);setcolor(15);outtextxy(115+i*25,245,s);outtextxy(120,300,"please choose the five number you want!!!"); }outtextxy(120,330,"use UP choose,use LEFT and RIGHT move");outtextxy(120,400,"press esc to quit");/*向图内添加字母*/itoa(money,m,10);outtextxy(230,180,n);outtextxy(250,180,m);if(kkk==1){setfillstyle(1,4);bar(115+(currenti-1)*25,255,130+(currenti-1)*25,260);kkk=kkk-1;}}void initcom(void){int i;for(i=0;i<=15;i++)com[i]=i;}void rrrpiao(void){int i;int k;for(i=0;i<=4;i++){rpiao[i]=random(15)+1;k=rpiao[i];if(com[k]==0)i=i-1;elsecom[k]=0;}} /*选择数字*/void show(int k){if(k==2)outtextxy(120,40,"you get the fourth prize 5 yuan");if(k==3)outtextxy(120,40,"you get the third prize 20 yuan");if(k==4)outtextxy(120,40,"congratulations!!! you get 1000 yuan"); if(k==5)outtextxy(120,40,"great!!!!!,you get 10000 yuan!!!!!"); }/*每局结束后显示的结果*/void jisuan(void){int k=0;int i,j;for(i=0;i<=4;i++)for(j=0;j<=4;j++)if(rpiao[i]==xpiao[j])k=k+1;if(k==0||k==1)money-=10;if(k==2)money-=5;if(k==3)money+=10;if(k==4)money+=990;if(k==5)money+=9990;show(k);}/*总钱数的计算*/void xxxpiao(void){static int i=0;int j;int k;int key;char s[3];key=bioskey(1);if(key)key=bioskey(0);if(key==esc){closegraph();exit(0);}if(key==up){xpiao[i]=currenti;for(j=0;j<i;j++)if(xpiao[j]==xpiao[i])i=i-1;i=i+1;setfillstyle(1,14);bar(115+(currenti-1)*25,235,130+(currenti-1)*25,240); }if(key==left){setfillstyle(1,0);bar(115+(currenti-1)*25,255,130+(currenti-1)*25,260); if(currenti==1)currenti=15;elsecurrenti=currenti-1;setfillstyle(1,4);bar(115+(currenti-1)*25,255,130+(currenti-1)*25,260); }if(key==right){setfillstyle(1,0);bar(115+(currenti-1)*25,255,130+(currenti-1)*25,260); if(currenti==15)currenti=1;elsecurrenti=currenti+1;setfillstyle(1,4);bar(115+(currenti-1)*25,255,130+(currenti-1)*25,260);}/*键盘的控制*/if(i==5){for(k=0;k<=4;k++){itoa(rpiao[k],s,10);outtextxy(230+k*30,350,s);}outtextxy(120,350,"the number:");outtextxy(120,370,"you choose:");/*选择完毕后,显示相同的个数*/for(k=0;k<=4;k++){itoa(xpiao[k],s,10);outtextxy(230+k*30,370,s);}jisuan();sleep(3);cleardevice();currenti=1;i=0;kkk=1;}}/*选择完毕后,停留的时间并清屏*/void dead(void){if(money<10){outtextxy(120,40,"you have not enough money");sleep(2);closegraph();exit(0);}}/*游戏结束的条件*/void main(void){int gd=DETECT,gm;initgraph(&gd,&gm,"");while(1){initmu();initcom();rrrpiao();xxxpiao();dead();}}五、主要解决问题的方法及技术关键1、主要问题及解决方法图形界面的绘制问题,主要是运用到C语言库函数自带的绘制图形的函数。

高级程序语言课程设计:猜数字游戏和推箱子游戏

高级程序语言课程设计:猜数字游戏和推箱子游戏

一、实验题目1、猜数字游戏;2、推箱子游戏。

二、实验内容1、猜数字编写一个猜数字游戏,规则如下:a,一个四位数,各位上的数字不重复,从1到9。

b,按一下提示猜出这个四位数。

c,每次猜测输入的数据给出本次共猜对了多少个数字。

d,给出本次猜对的数字并且为之正确的个数。

2、推箱子利用数组和字符显示实现推箱子游戏。

三、设计思路1、猜数字游戏首先通过rand()随机产生一个四位数,将各个数位上的数字储存到一个数组num[]中,定义int型变量number储存输入的四位数,然后将这个数的各个数位上的数字储存到数组cmp[]中,将num[]和cmp[]中的元素相比较,当num[i]= =cmp[j]时,m++,当i= =j同时成立时,n++,这样就可以判断出本次输入的四位数猜对了m个,其中n个位置正确。

2、推箱子游戏推箱子游戏地图由一个字符型二维数组确定,通过调用无返回值的函数move_up(),move_down(),move_left(),move_right()来实现向上下左右的移动。

每次移动前都会有一个循环遍历数组找到小人位置,然后用switch语句对不同情况下小人如何移动进行不同的处理,while()循环来判断是否箱子都被移动到指定位置来确定是继续移动还是结束游戏。

int step用于记录移动的步数。

四、程序代码1、猜数字游戏程序代码如下:#include<iostream.h>#include<stdlib.h>#include<time.h>void main(){int i,j,x,number,m,n;int num[10],cmp[10];srand(unsigned(time(NULL))); for (i=0;i<4;i++){leap:x=rand()%9+1;for(j=0;j<i;j++){if(num[j]==x)goto leap;}num[i]=x;}cout<<"******************** **"<<endl<<endl;cout<<" 猜数字游戏"<<endl<<endl;cout<<"******************** **"<<endl<<endl;;cout<<"* 游戏规则:此数字为一个由1—9组成的各个数位不相等的四位数,每次输入后,系统给出猜对数字个数xAyB (即猜对x个,其中y个位置正确),直到猜对四个数字,游戏结束。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);}。

相关文档
最新文档