C++算法之石头剪子布
初三 议论文 6126字 2181人浏览 峰回路转inggo

课程设计说明书

题 目: 石头剪子布游戏的C++程序设计 学生姓名:

学 院: 理学院

班 级: 信计08-2

指导教师: 田 毅

二〇一二年 一 月 四 日

内蒙古工业大学课程设计(论文)任务书

课程名称: 面向对象的程序设计 学院: 理学院 班级: 信计08-2 学生姓名: __ 学号: 指导教师: 田 毅

摘要

本文主要介绍利用C++高级语言实现石头剪子布游戏的编辑和运行。通过

Microsoft Visual C++ 6.0软件进行石头剪子布游戏程序的编译,确定模块之间关系及各模块功能,设计一个简单的操作界面实现石头剪子布游戏,。

石头剪子布游戏系统通过C++高级语言进行编程,并设计了简单明了的操作界面,为用户提供更好的操作体验,更直接而充分的掌握本程序的一些应用和功能。通过直观的方式,最终实现C++设计的应用程序——石头剪子布游戏。本次课设所做程序虽然只是一个简单的C++手石头剪子布游戏程序,但是基本的应用功能都已具备,可以更好的用在实际应用中。

关键词:C++高级语言;Microsoft Visual C++ 6.0;石头剪子布游戏

目录

引言 ................................................................... 1

第一章 石头剪子布游戏简介 .............................................. 2

1.1 选题背景 ....................................................... 2

1.2 开发环境 ....................................................... 2

第二章 游戏分析与设计 .................................................. 4

2.1游戏功能分析 . ............................................. 4

2.1.1功能需求分析 ............................................... 4

2.1.2关键技术 ................................................... 4

2.1.3数据流程图 ................................................. 5

2.2详细设计 ........................................................ 6

2.2.1 设计思路................................................... 6

2.2.2 功能设计................................................... 7

第三章 系统运行结果与总结 ............................................. 11

3.1运行结果 ....................................................... 11

3.2总结 ........................................................... 13

参考文献 .............................................................. 15

1 引言

“剪刀石头布”是人们喜欢的一种娱乐游戏,近来,随着计算机的快速发展,以计算机作为对战平台,各种游戏如雨后春笋般纷纷冒出,使得那些爱好娱乐,又常常苦于没有对手的爱好者们能随时过足娱乐之瘾,而且这类软件个个水平颇高,大有与人脑分庭抗礼之势。

当我们与电脑对战对时,您知道这些软件是怎样像人脑一样进行思考的吗?总的来说,要让电脑知道该怎么选择,就要根据随机状态,产生每一种随即可能,这便是最基本的算法。

C++语言是一种面向对象的语言,尽管在当前,可视化语言发展迅速,普及很快,但C++语言作为一种基础的语言,它的有时依然存在,甚至有时它是不可替代的,特别是和硬件接口技术相联系的软件。石头剪子布游戏是一种简单大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱。本文使用C++语言,设计了剪刀石头布游戏软件,在人机对弈时,使电脑具有较高的智商。本游戏是以C++语言作为开发工具,采用搜索算法设计最优落子点开发的游戏软件。本文详细地介绍了石头剪刀布游戏软件设计的全过程,描述了该软件的功能。

2 第一章 石头剪子布游戏简介

1.1 选题背景

随着计算机技术的飞速发展,其应用方面已渗透到社会生活的各个领域。它已经成为我们学习和工作中的重要工具,也是人们娱乐休闲的主要方式。通过一个学期的C++语言课程的学习,根据学校课程设计的学习安排,要进行三周的C++语言程序设计,自己动手编写游戏或系统。根据老师布置的设计任务书,根据我自己的能力及意愿,我选择了设计一个小游戏:石头剪子布游戏。

石头剪子布游戏是一款简单的游戏,由两个人对抗,每人同时选择一种状态,状态分为三种:石头、剪子和布。其中,布大于石头,石头大于剪子,剪子又能大于布。若两个人的状态相同,则是为平局,否则按上述规则分胜负。游戏要求,两人必须同时出示状态,且状态唯一,不能修改。此次课程设计是人机对弈,一方为用户,一方为计算机,计算机随机产生状态,不违背规则。

实验准备:做游戏前,首先,详细参看了《面向对象的程序设计》,理解相关函数的用法和作用;另外,上网查询了很多相关资料,还找了很多相关的游戏设计的代码,都详细的参看了一遍,加深了对C++语言以及相关内容进一步理解。根据实际情况设计出一款比较理想的小游戏。

本论文将具体介绍手石头剪子布游戏程序的设计、编译、运行。

1.2开发环境

石头剪子布游戏的开发环境使用的是Visual C++ 6.0,简称VC 或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft 公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C++.NET(Visual C++7.0),但它的应用有很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C++6.0为平台。此次程设计题目是手机名片系统,通过C\S模式,在界面中输入信息,对信息直接查询、添加、修改及删除操作。

Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创建预编

3 译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。但是,他仍旧存在着缺点,由于C++是由C 语言发展起来的,也支持C 语言的编译。最大的缺点是对于模版的支持比较差。现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态。仅支持Windows 操作系统。目前发现与windows 7兼容性不好,安装成功后可能会出现无法打开.cpp 文件的现象。

4 第二章 游戏分析与设计

2.1游戏功能分析

随着人们生活水平的不断提高,和科学技术的日益进步。生活中我们总会需要记录一些人的联系方式,包括一些朋友、同学、老师、亲人甚至一些总要客户等等。而传统的纸质名片显然已经不适应现在的生活方式和节奏。而一些重要的联系方式又不能丢掉,所以通过C++文件处理方式来编程的手机名片能够实现基本的电话簿操作和应用。即简单易用,又不失良好的用户操作界面,通过本次的课程设计,希望可以给生活中忙碌的人们带来一些帮助。

2.1.1 功能需求分析

本系统定位于简单的“石头剪刀布”小应用程序,暂时只考虑单机环境下的实现;操作系统选择目前常用的Windows xp或者Windows 7系统 。

游戏系统采用人机交互模式,用户可以通过相应的操作完成游戏。

本系统的界面力求简洁、易用,在标准化的基础上考虑界面的美观和新颖。

本系统面向所有人群,凡是懂得计算机基本操作的人都可以对本程序进行应用。简单明了的操作界面能够让用户迅速的适应并掌握。

本系统操作过程:输入数据;计算机随机输入数据;存储数据:存储计算机的输入数据;存储用户的合法输入数据;判断用户的输赢:根据用户的选择,比较用户与计算机的胜负;计算用户的胜负率:根据计算机的记录,计算用户的胜负次数的总和及概率。

2.1.2 关键技术

本程序是一个简单游戏的应用程序,程序设计结构如表2-1中所示,具有一定的娱乐功能,界面简单,操作简便。如图2.1为石头剪刀布游戏系统的数据流程图,从图中可以清晰地看到系统的功能模块及整体结构。

游戏功能的关键技术:

①熟练掌握并运用C++语言源代码;

5 ②熟练掌握并运用C++中的重要函数; ③掌握循环的函数的具体运用; ④能于C++环境中运行游戏;

2.1.3 数据流程图

图2.1 游戏系统

图2.2 数据处理图

图2.3 数据流程图

6 2.2详细设计

详细设计是整个程序设计的关键,为模块内的数据结构进行设计,能满足用户对数据的处理要求;是对现实世界的具体分析。它易于编辑者的理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是程序设计成功的关键。其次它易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。

2.2.1 设计思路

用户输入:计算机随机输入选择,用户输入选择,并将数据储存。

计算:根据计算机和用户的选择,计算大小,并判断输赢,计算用户的胜负率,并储存。

输出:根据用户的输入,将用户的游戏结果显示在屏幕上。

如表2-1所示,将系统的功能模块已经明晰的列出。

表2-1 系统设计思路

在系统中,电脑要完成绝大部的功能。在玩家下完了之后,电脑要判断玩家是否获胜、是否电脑获胜。石头剪刀布游戏中包含了三条关键信息:锤子、剪刀、布,如表2-2所示。

7 2.2.2 功能设计

石头剪子布游戏是一款简单的游戏,由两个人对抗,本程序一方为用户,一方为计算机,计算机随机产生状态,状态分为三种:石头、剪子和布。其中,布大于石头,石头大于剪子,剪子又能大于布。若两方的状态相同,则是为平局,否则按上述规则分胜负。

具体功能设计实现代码:

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

void main()

{

char r; /* 用来存放用户的选择 */

char dn; /* 用来存放电脑的选择 */

int s,q;

double p,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)

{

9 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

{

10 printf("电脑WIN! 布:锤子\n");n++; }break;

}

}while(r==dn);

}while(r=='j'||r=='b'||r=='c'); }

11 第三章 系统运行结果与总结

3.1运行结果

运行游戏时,进行相应的操作,其显示结果如下所示。

图3.1 输入锤子

图3.2 多次输入石头剪刀布

12

图3.3 显示比赛结果(1)

图3.4 显示比赛结果(2)

13

图3.5 显示比赛结果(3)

3.2总结

此程序设计的实验是对我进入大学以来学习程序设计语言成果的一个检验。自己动手,自己发现和解决问题,学会了独立,自主的思考,发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C++的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。

当我选择编写小游戏“石头剪子布”这个题目时,一开始想运用大量函数及循环来完成,但是在慢慢琢磨之后,觉得这个程序可以简化,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。另外一点要说的就是这个程序用了很多的选择循环,因此对于循环的控制要十分小心。

还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,学会利用网络等了解知识的平台去学习和掌握更多的知识,

这样我

14 们才能编出更好的C++程序。

总体来说,这次C++语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。

最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和其他同学对我的帮助与支持。

15 参考文献

[1]郑莉,董渊,何江舟.C++语言程序设计[M].第4版. 北京:清华大学出版.2010年.7月.

[2]吴乃陵, 况迎辉.C++课程设计[M]. 北京:高等教育出版社,2006年.

[3]谢昕,刘觉夫,王更生.C++程序设计[M].北京:北京邮电大学出版社,2008年.

[4]韦朴,陈泰生. Visual C++通用范例开发金典[M]. 北京:电子工业出版社.2008年.

[5]冷金麟. C++程序设计[M].上海:上海交通大学出版社.2008年