课程实验设计:基于c++面向对象石头剪子布游戏-附源代码_第1页
课程实验设计:基于c++面向对象石头剪子布游戏-附源代码_第2页
课程实验设计:基于c++面向对象石头剪子布游戏-附源代码_第3页
课程实验设计:基于c++面向对象石头剪子布游戏-附源代码_第4页
课程实验设计:基于c++面向对象石头剪子布游戏-附源代码_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(sdut)(附源代码)基于C+设计的剪刀石头布的游戏信科1301 韩玙欤1 需求分析 题目的要求是要求:(1)实现人机对战的功能,(2)程序具有启动菜单和欢迎信息;(3)可以记录比赛的次数,输赢的次数其中输入形式为代表石头剪子和布三种实物的字符;我在这里选择用2代表石头,1代表剪子,0代表布。我在程序中设计了三种游戏方式,分别为,人机模式,人人模式,连胜模式,其中人机模式设置有记录,可以记录总共的胜局败局和平局,连胜模式设置了英雄榜取得更高连胜成绩的人可以更新英雄榜。(测试数据见6 ) 2概要设计 3详细设计 程序中共有cai,caipeople,caichallenge三个类,以实现游戏中

2、人机对战,人人对战,和连胜模式。对于猜拳过程中随机情况的使用,我选择的是调用知道,C语言中rand()函数,但是因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数。所以如果玩家可以知道多次重启游戏后可以知道电脑的前几次出拳会是什么。在判断输赢的过程中,如果玩家1赢电脑(或玩家2)则会出现关系式字符2-1=1,1-0=0,0-2=-2;所以可使用if(a1-a2=1|a1-a2=-2);平局为else if(a1-a2=0);失败为else ;其中使用了windows.h来设置字体的颜色,和窗口的大

3、小,同时在编程过程中加入适当的字符画以达到美化的效果。(函数调用关系请看概要设计) 4 调试分析 算法复杂程度一般,较为简单。可采用time.h结合srand()和rand()配合使用产生随机数序列。做的不错。5 用户使用说明 输入数字使用键盘输入字符,按回车运行。6 测试结果 7 参考文献 C_Primer_Plus(第五版)中文版8 附录#pragma warning (disable:4996)#include <iostream>#include <stdio.h>#include <Windows.h>#include <time.h>

4、#include <string>using namespace std;HANDLE g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);/创建句柄/设置光标位置void SetCursor(COORD cd) SetConsoleCursorPosition(g_hOutput, cd);void SetCursor(int x, int y) COORD cd = x, y ; SetCursor(cd);void play();void playpeople();void playchallenge();void explain();vo

5、id rank_1();void record();void about();void time_1();void chuquan(int a);/展示出拳char name10;/擂主记录int big=0;int bigger=0;class cai/普通猜拳模式private:int i;int a;public:static int x,y,z;void show(int chu)i=rand()%3;a=chu;cout<<"你的出拳:"chuquan(a);cout<<" VS "<<"电脑的出拳

6、:"chuquan(i);cout<<endl;if(a-i=1|a-i=-2)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED );cout<<"you win"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREE

7、N | FOREGROUND_BLUE);x+;else if(a-i=0)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_GREEN);cout<<"pingle"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUN

8、D_BLUE);y+;elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE);cout<<"defeat"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);z+;cout<<&

9、quot;你目前:ntwin局t平局t输局"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"t"<<cai:x;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);cout<<"t"<&l

10、t;cai:y;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE| FOREGROUND_GREEN);cout<<"t"<<cai:z<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLU

11、E);int cai:x=0;int cai:y=0;int cai:z=0;class caipeople/人人猜拳模式private:int p1;int p2;public:void play()cout<<"t石头:2 剪子:1布:0"<<endl;cout<<"请玩家一输入所出拳,n玩家二回避。"<<endl;cin>>p1;system("cls");cout<<"t石头:2 剪子:1布:0"<<endl;cout<

12、;<"请玩家一输入所出拳,n玩家二回避。"<<endl;cout<<"*"<<endl;cout<<"请玩家二输入所出拳"<<endl;cin>>p2;system("cls");cout<<"t石头:2 剪子:1布:"<<endl;cout<<"玩家一所出拳:"chuquan(p1);cout<<"n玩家二所出拳所出拳:"chuq

13、uan(p2);cout<<endl;if(p1-p2=1|p1-p2=-2)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"玩家一获胜"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREG

14、ROUND_BLUE);else if(p1-p2=0)cout<<"实力相当"<<endl;elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"玩家二获胜"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RE

15、D | FOREGROUND_GREEN | FOREGROUND_BLUE);class caichallenge/连胜模式private:int a1;int a2;public:/static int vs;int no;void play()no=0;cout<<"t"cin>>a1;a2=rand()%3;Sleep(500);cout<<"t.n"Sleep(500);cout<<"t.n"Sleep(500);cout<<"t.n"Sleep

16、(500);cout<<"t.n"Sleep(500);cout<<"t.n"cout<<"你的出拳:"chuquan(a1);cout<<" VS "<<"电脑的出拳:"chuquan(a2);cout<<endl;if(a1-a2=1|a1-a2=-2)cout<<"t再来猜我一拳!"big+;else if(a1-a2=0)cout<<"t好汉再来一局"e

17、lsecout<<"t再回去修炼一下吧"<<endl;no=-1;/int caichallenge:vs=0;cai use;/用于静态的变量的调用void operate(string);cai a;caipeople a2;caichallenge a3;int main()system("cls"); system("mode con cols=34 lines=40");/定义窗体大小string ch;doSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT

18、_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN);cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<""<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<

19、;<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOR

20、EGROUND_BLUE);cout<<"*"<<endl;cout<<"* 石头剪子布 *"<<endl;cout<<"* 1.进入游戏(人机对战) *"<<endl;cout<<"* 2.进入游戏(人人对战) *"<<endl;cout<<"* 3.挑战模式(连胜模式) *"<<endl;cout<<"* 4.游戏说明 *"<<e

21、ndl;cout<<"* 5.游戏记录 *"<<endl;cout<<"* 6.排行榜(连胜模式) *"<<endl;cout<<"* 7.关于 *"<<endl;cout<<"* 8.查看当前时间 *"<<endl;cout<<"* 0.退出游戏 *"<<endl;cout<<"*输入对应数字,按下回车使用其功能*"<<endl;c

22、out<<"*"<<endl;/*do /HideCursor(); SetCursor(44, 0); time_t rawtime; struct tm * timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); SetConsoleTextAttribute(g_hOutput, FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf("%s", asctime(timeinfo); Sleep(1000);

23、 while (1);*/cin>>ch;operate(ch);system("pause");system("cls");while(ch!="0");return 0;void operate(string str)system("cls");if(str="1")play();else if(str="2")playpeople();else if(str="3")playchallenge();else if(str="4&

24、quot;)explain();else if(str="5")record();else if(str="6")rank_1();else if(str="7")about();else if(str="8")time_1();else if(str="0")cout<<"byebye"<<endl;elsecout<<"请输入有效数字"<<endl;void play()cout<<"

25、;石头:2 剪子:1布:0"<<endl;int x;docin>>x;a.show(x);cout<<"继续输入2,1,0可继续猜拳,输入其他按键结束战斗,返回上界面"<<endl;while(x=0|x=1|x=2);void playpeople()int x;doa2.play();cout<<"输入0终止猜拳,输入其他继续进行对决"<<endl;cin>>x;while(x!=0);void playchallenge()int x;big=0;cou

26、t<<"当前为连胜模式,如果胜利可取得继续猜拳的资格,且中途不可退出,如果猜拳失败则返回上一界面n战斗吧!"<<endl;cout<<"请出拳"<<endl;doa3.play();x=a3.no;while(x!=-1);if(bigger<=big)bigger=big;cout<<"恭喜你创造了新的世界记录,请留下您的大名"<<endl;/for(int z;z<10;z+)/namez='0'cin>>name;vo

27、id explain()cout<<"规则:n 石头打剪刀,n 布包石头,n 剪刀剪布,n 输入2代表石头,n 输入1代表剪子,n 输入0代表布。n输入后按下回车n同电脑进行猜拳。"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_BLUE);cout<<" "<<endl;cout<<""<&l

28、t;endl; cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<" 必"<<

29、;endl;cout<<" 胜"<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;SetConsoleTextAttribute(Get

30、StdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);void about()cout<<" 当前版本1.0.0 "<<endl;cout<<" 基于c+的石头剪子布游戏 "<<endl;cout<<" 作者:韩志杰 "<<endl;cout<<" 生产日期:2014/7/7 "

31、<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED);cout<<" | "<<endl;cout<<" /7 / "<<endl;cout<<" / "<<endl;cout<<" Z , / "<<endl;cout&l

32、t;<" /"<<endl;cout<<" Y / / "<<endl;cout<<" < .> / "<<endl;cout<<" () () | "<<endl;cout<<" > _ / "<<endl;cout<<" / / | "<<endl;cout<<" _/(_ "<&

33、lt;endl;cout<<" 7| "<<endl;cout<<" r 丨 "<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);void record()cout<<"你目前:ntwin局t平局t输局"<<endl;SetConsoleT

34、extAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"t"<<cai:x;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);cout<<"t"<<cai:y;SetConsoleTextAttribute(GetStdHandle(STD_OU

35、TPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE| FOREGROUND_GREEN);cout<<"t"<<cai:z<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);void rank_1()cout<<"* HERO *"cout<<" "<<name<<" 连胜"<<bi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论