C++算法之石头剪子布.docx
- 文档编号:26224576
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:17
- 大小:204.47KB
C++算法之石头剪子布.docx
《C++算法之石头剪子布.docx》由会员分享,可在线阅读,更多相关《C++算法之石头剪子布.docx(17页珍藏版)》请在冰豆网上搜索。
C++算法之石头剪子布
学校代码:
10128
学号:
课程设计说明书
题目:
石头剪子布游戏的C++程序设计
学生姓名:
学院:
理学院
班级:
信计08-2
指导教师:
田毅
二〇一二年一月四日
内蒙古工业大学课程设计(论文)任务书
课程名称:
面向对象的程序设计学院:
理学院班级:
信计08-2
学生姓名:
__学号:
指导教师:
田毅
一、题目
石头剪子布游戏的C++程序设计
二、目的与意义
面向对象程序设计课程设计可以培养学生综合运用所学面向对象程序设计知识和技能分析与解决实际问题的能力,以及严肃认真的科学态度和严谨求实的工作作风。
三、要求(包括原始数据、技术参数、设计要求、图纸量、工作量要求等)
●采用面向对象程序设计语言C++进行程序开发
●选用一种C++语言的开发环境设计界面及程序
●在开发环境下,进行程序的运行及调试
四、工作内容、进度安排
主要内容
使用C++程序设计语言及其开发环境利用文件处理方式实现石头剪子布游戏的编写和调试。
工作进度安排
第一天:
熟悉课程设计题目及具体要求,认识所要解决的问题,基本确定选择的开发环境。
第二天到第四天:
拿出解决问题的初步方案,根据课题给出的题目,确定题目的解决方式及步骤。
第五天到第七天:
设计系统的功能模块,确定模块的功能,及模块之间的关系。
第八天到第十天:
分析模块,确定需要的界面、结构,完成软件的整体框架,在开发环境下,编程实现所开发的系统。
第十一天到第十二天:
综合调试,去除软件中的错误,美化应用程序的界面。
第十三天和第十五天:
撰写课程设计报告。
五、主要参考文献
[1]郑莉,董渊,何江舟.C++语言程序设计.第4版.北京:
清华大学出版.2010.7
[2]吴乃陵,况迎辉.C++课程设计.北京:
高等教育出版社,2006
[3]谢昕,刘觉夫,王更生.C++程序设计.北京:
北京邮电大学出版社,2008
审核意见
系(教研室)主任(签字)
指导教师下达时间2011年12月19日
指导教师签字:
_______________
摘要
本文主要介绍利用C++高级语言实现石头剪子布游戏的编辑和运行。
通过MicrosoftVisualC++6.0软件进行石头剪子布游戏程序的编译,确定模块之间关系及各模块功能,设计一个简单的操作界面实现石头剪子布游戏,。
石头剪子布游戏系统通过C++高级语言进行编程,并设计了简单明了的操作界面,为用户提供更好的操作体验,更直接而充分的掌握本程序的一些应用和功能。
通过直观的方式,最终实现C++设计的应用程序——石头剪子布游戏。
本次课设所做程序虽然只是一个简单的C++手石头剪子布游戏程序,但是基本的应用功能都已具备,可以更好的用在实际应用中。
关键词:
C++高级语言;MicrosoftVisualC++6.0;石头剪子布游戏
1.2开发环境2
2.1.1功能需求分析4
2.1.2关键技术4
2.1.3数据流程图5
2.2详细设计6
2.2.1设计思路6
2.2.2功能设计7
3.1运行结果11
3.2总结13
引言
“剪刀石头布”是人们喜欢的一种娱乐游戏,近来,随着计算机的快速发展,以计算机作为对战平台,各种游戏如雨后春笋般纷纷冒出,使得那些爱好娱乐,又常常苦于没有对手的爱好者们能随时过足娱乐之瘾,而且这类软件个个水平颇高,大有与人脑分庭抗礼之势。
当我们与电脑对战对时,您知道这些软件是怎样像人脑一样进行思考的吗?
总的来说,要让电脑知道该怎么选择,就要根据随机状态,产生每一种随即可能,这便是最基本的算法。
C++语言是一种面向对象的语言,尽管在当前,可视化语言发展迅速,普及很快,但C++语言作为一种基础的语言,它的有时依然存在,甚至有时它是不可替代的,特别是和硬件接口技术相联系的软件。
石头剪子布游戏是一种简单大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱。
本文使用C++语言,设计了剪刀石头布游戏软件,在人机对弈时,使电脑具有较高的智商。
本游戏是以C++语言作为开发工具,采用搜索算法设计最优落子点开发的游戏软件。
本文详细地介绍了石头剪刀布游戏软件设计的全过程,描述了该软件的功能。
第一章石头剪子布游戏简介
1.1选题背景
随着计算机技术的飞速发展,其应用方面已渗透到社会生活的各个领域。
它已经成为我们学习和工作中的重要工具,也是人们娱乐休闲的主要方式。
通过一个学期的C++语言课程的学习,根据学校课程设计的学习安排,要进行三周的C++语言程序设计,自己动手编写游戏或系统。
根据老师布置的设计任务书,根据我自己的能力及意愿,我选择了设计一个小游戏:
石头剪子布游戏。
石头剪子布游戏是一款简单的游戏,由两个人对抗,每人同时选择一种状态,状态分为三种:
石头、剪子和布。
其中,布大于石头,石头大于剪子,剪子又能大于布。
若两个人的状态相同,则是为平局,否则按上述规则分胜负。
游戏要求,两人必须同时出示状态,且状态唯一,不能修改。
此次课程设计是人机对弈,一方为用户,一方为计算机,计算机随机产生状态,不违背规则。
实验准备:
做游戏前,首先,详细参看了《面向对象的程序设计》,理解相关函数的用法和作用;另外,上网查询了很多相关资料,还找了很多相关的游戏设计的代码,都详细的参看了一遍,加深了对C++语言以及相关内容进一步理解。
根据实际情况设计出一款比较理想的小游戏。
本论文将具体介绍手石头剪子布游戏程序的设计、编译、运行。
1.2开发环境
石头剪子布游戏的开发环境使用的是VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用有很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
此次程设计题目是手机名片系统,通过C\S模式,在界面中输入信息,对信息直接查询、添加、修改及删除操作。
VisualC++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。
这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
但是,他仍旧存在着缺点,由于C++是由C语言发展起来的,也支持C语言的编译。
最大的缺点是对于模版的支持比较差。
现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态。
仅支持Windows操作系统。
目前发现与windows7兼容性不好,安装成功后可能会出现无法打开.cpp文件的现象。
第二章游戏分析与设计
2.1游戏功能分析
随着人们生活水平的不断提高,和科学技术的日益进步。
生活中我们总会需要记录一些人的联系方式,包括一些朋友、同学、老师、亲人甚至一些总要客户等等。
而传统的纸质名片显然已经不适应现在的生活方式和节奏。
而一些重要的联系方式又不能丢掉,所以通过C++文件处理方式来编程的手机名片能够实现基本的电话簿操作和应用。
即简单易用,又不失良好的用户操作界面,通过本次的课程设计,希望可以给生活中忙碌的人们带来一些帮助。
2.1.1功能需求分析
本系统定位于简单的“石头剪刀布”小应用程序,暂时只考虑单机环境下的实现;操作系统选择目前常用的Windowsxp或者Windows7系统。
游戏系统采用人机交互模式,用户可以通过相应的操作完成游戏。
本系统的界面力求简洁、易用,在标准化的基础上考虑界面的美观和新颖。
本系统面向所有人群,凡是懂得计算机基本操作的人都可以对本程序进行应用。
简单明了的操作界面能够让用户迅速的适应并掌握。
本系统操作过程:
输入数据;计算机随机输入数据;存储数据:
存储计算机的输入数据;存储用户的合法输入数据;判断用户的输赢:
根据用户的选择,比较用户与计算机的胜负;计算用户的胜负率:
根据计算机的记录,计算用户的胜负次数的总和及概率。
2.1.2关键技术
本程序是一个简单游戏的应用程序,程序设计结构如表2-1中所示,具有一定的娱乐功能,界面简单,操作简便。
如图2.1为石头剪刀布游戏系统的数据流程图,从图中可以清晰地看到系统的功能模块及整体结构。
游戏功能的关键技术:
①熟练掌握并运用C++语言源代码;
②熟练掌握并运用C++中的重要函数;
③掌握循环的函数的具体运用;
④能于C++环境中运行游戏;
2.1.3数据流程图
图2.1游戏系统
图2.2数据处理图
图2.3数据流程图
2.2详细设计
详细设计是整个程序设计的关键,为模块内的数据结构进行设计,能满足用户对数据的处理要求;是对现实世界的具体分析。
它易于编辑者的理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是程序设计成功的关键。
其次它易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。
2.2.1设计思路
用户输入:
计算机随机输入选择,用户输入选择,并将数据储存。
计算:
根据计算机和用户的选择,计算大小,并判断输赢,计算用户的胜负率,并储存。
输出:
根据用户的输入,将用户的游戏结果显示在屏幕上。
如表2-1所示,将系统的功能模块已经明晰的列出。
表2-1系统设计思路
操作
说明
用户输入
用户输入选择
计算
计算大小,并判断输赢
输出
将游戏结果显示在屏幕上
在系统中,电脑要完成绝大部的功能。
在玩家下完了之后,电脑要判断玩家是否获胜、是否电脑获胜。
石头剪刀布游戏中包含了三条关键信息:
锤子、剪刀、布,如表2-2所示。
表2-2输入信息
标号
内容
c
锤子
j
剪刀
b
布
2.2.2功能设计
石头剪子布游戏是一款简单的游戏,由两个人对抗,本程序一方为用户,一方为计算机,计算机随机产生状态,状态分为三种:
石头、剪子和布。
其中,布大于石头,石头大于剪子,剪子又能大于布。
若两方的状态相同,则是为平局,否则按上述规则分胜负。
具体功能设计实现代码:
#include
#include
#include
voidmain()
{
charr;/*用来存放用户的选择*/
chardn;/*用来存放电脑的选择*/
ints,q;
doublep,y,n,f,z;
p=0;
y=0;
n=0;
printf("出锤子输入c\n出剪刀输入j\n出布输入b\n计算您的得分输入f\n可以一次输入许多会一次性出很多结果哦\n请输入您的选择:
\n");
srand(time(0));/*随机数生成器,设置rand种子值,用来获取计算机的输入*/
//enum{布,剪刀,石头,结束}dn,r;
do{
do{
s=rand()%3;
switch(s)
{
case0:
dn='c';break;
case1:
dn='j';break;
case2:
dn='b';break;
}
do{
scanf("%c",&r);/*用来获取用户的合法输入*/
}while(r!
='c'&&r!
='b'&&r!
='j'&&r!
='f');
if(r=='f')
{
z=y+n+p;
f=100/z*(p/2.0+y);//p平局y赢局n输局z总共局数
printf("一共比了%g场\n赢了%g场\n输了%g场\n平局%g场\n",z,y,n,p);
y=100/z*y;
n=100/z*n;
p=100/z*p;
printf("您的胜率为%.3g%%\n您的败率为%.3g%%\n您平局率为%.3g%%\n您的综合分数为%.3g\n对您成绩的评语:
",y,n,p,f);
if(f<=20)
printf("您的运气真的差到一定无法想象的程度了~!
\n\n");
if(f>20&&f<=40)
printf("您的运气差了点哦,努力,加油!
\n\n");
if(f>40&&f<=60)
printf("您的运气还可以中等啦~中等啦……\n\n");
if(f>60&&f<=80)
printf("您的运气不错哟~!
嘿嘿……\n\n");
if(f>80&&f<=100)
printf("哇~!
~!
~您的运气真的好到家了你太帅了GG你太可爱了MM~!
!
~\n\n");
printf("\n随便输入几个字符按回车关闭程序\n");
scanf("%d",&q);
}
if(dn==r)
{
printf("平手,继续\n");
p++;
}
else
switch(dn)
{
case'c':
if(r=='j')
{
printf("电脑WIN!
!
锤子:
剪刀\n");n++;
}
else
{
printf("人WIN!
锤子:
布\n");y++;
}break;
case'j':
if(r=='b')
{
printf("电脑WIN!
剪刀:
布\n");n++;
}
else
{
printf("人WIN!
剪刀:
锤子\n");y++;
}break;
case'b':
if(r=='c')
{
printf("人WIN!
剪刀:
锤子\n");y++;
}
else
{
printf("电脑WIN!
布:
锤子\n");n++;
}break;
}
}while(r==dn);
}while(r=='j'||r=='b'||r=='c');
}
第三章系统运行结果与总结
3.1运行结果
运行游戏时,进行相应的操作,其显示结果如下所示。
图3.1输入锤子
图3.2多次输入石头剪刀布
图3.3显示比赛结果
(1)
图3.4显示比赛结果
(2)
图3.5显示比赛结果(3)
3.2总结
此程序设计的实验是对我进入大学以来学习程序设计语言成果的一个检验。
自己动手,自己发现和解决问题,学会了独立,自主的思考,发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。
我相信在以后的学习能够解决好它们。
但是,收获还是不小的,我不仅对C++的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。
当我选择编写小游戏“石头剪子布”这个题目时,一开始想运用大量函数及循环来完成,但是在慢慢琢磨之后,觉得这个程序可以简化,于是改变了编程思路。
当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。
另外一点要说的就是这个程序用了很多的选择循环,因此对于循环的控制要十分小心。
还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,学会利用网络等了解知识的平台去学习和掌握更多的知识,这样我们才能编出更好的C++程序。
总体来说,这次C++语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。
最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和其他同学对我的帮助与支持。
电脑通常建立简单规则和运用平均化统计来模拟人类的思维。
在这个展示基本人工智能的剪刀石头布游戏当中,你可以运用你自己的策略与电脑过招。
你可选择两种模式:
新手,电脑只会从本轮游戏当中学习;老手,电脑运用过去20万次的出手经验与你对抗。
原理解释:
真正随机的剪刀石头布游戏在统计上的结果是每个玩家的赢、平、输各占三分之一。
然而,人并非随机行事,所以人类的行为可以被研究和分析。
尽管电脑不会每一轮都赢,但经过多次出手后电脑渐渐摸索出对手的未来意向和思考模式,比对手更胜一筹。
操作说明:
(需要浏览器支持Flash)
1、游戏界面分左、中、右三部分;
2、右:
点击选择新手或老手模式;
3、左:
点击选择“石头”、“布”、“剪刀”;
4、中上:
计分显示,玩家赢、平、电脑赢,中下:
各轮历史记录;
参考文献
[1]郑莉,董渊,何江舟.C++语言程序设计[M].第4版.北京:
清华大学出版.2010年.7月.
[2]吴乃陵,况迎辉.C++课程设计[M].北京:
高等教育出版社,2006年.
[3]谢昕,刘觉夫,王更生.C++程序设计[M].北京:
北京邮电大学出版社,2008年.
[4]韦朴,陈泰生.VisualC++通用范例开发金典[M].北京:
电子工业出版社.2008年.
[5]冷金麟.C++程序设计[M].上海:
上海交通大学出版社.2008年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 算法 石头 剪子