第1章 引言 - 1 -
第2章 任务概述... - 1 -
2.1问题概述... - 1 -
2.1.1问题重述... - 1 -
2.1.2设计目的... - 1 -
2.2需求分析... - 1 -
2.2.1基本要求... - 1 -
2.2.2游戏功能介绍... - 1 -
2.3编程语言概述... - 1 -
2.4编程环境概述... - 1 -
第3章 概要设计... - 2 -
3.1功能设计... - 2 -
3.2程序结构... - 2 -
3.3基本流程... - 2 -
第4章 程序实现... - 3 -
4.1主要变量及函数的说明... - 3 -
4.1.1主要变量... - 3 -
4.1.2主要函数... - 4 -
4.2主要功能的实现... - 4 -
4.2.1 落子的功能... - 4 -
4.2.2 输出棋盘... - 4 -
4.2.3查看输赢并消去棋子... - 4 -
4.2.4消去棋子后让上面棋子下落的函数... - 4 -
第5章 结果与讨论... - 5 -
5.1 运行结果截图... - 5 -
5.2程序的讨论与优化... - 6 -
参考文献:... - 6 -
第1章 引言
通过半年的课程学习,对C++语言和Codeblocks编程环境有了一定程度的了解。根据课程要求,利用两周时间对所学知识加以巩固学习,学会独立地编写一些简单的程序,初步接触程序设计与软件实现的思想内涵。
该设计在传统连四游戏的基础上添加了加分计分的功能,增加了游戏的趣味性和难度。
由于作者水品有限,游戏当中依然还有许多不完善的地方,恳请老师和同学们批评指正。
第2章 任务概述
2.1问题概述
2.1.1问题重述
完成控制台下的连四对弈软件,可评判输赢,棋盘大小为6X6
2.1.2设计目的
独立地利用所学的C++语言和Codeblocks编程环境编写程序。
2.2需求分析
2.2.1基本要求
能正常实现连四游戏的功能,横竖斜先出现四个以上相同子的加分。
当一方的分值先达到开始设置的分值时获胜。
2.2.2游戏功能介绍
在这里详细介绍一下进入游戏后的选项:
(1)首先提示双方输入各自的姓名
(2)然后提示输入想要获胜需达到的分数n
(3)然后进入对弈界面,提示双方输入1-6来进行对弈
(4)当一方分数先达到n时,获胜
(5)若一直无人获胜,输出棋盘已满和棋
2.3编程语言概述
C++这个词在中国大陆的程序员圈子中通常被读作“C加加”,而西方的程序员通常读作“C
Plus plus“,”CPP“。它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、
支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图表等等泛型程序设计等多种风格。
2.4编程环境概述
Codeblocks是一个开放源码的全功能的跨平台C/C++集成开发环境。Codeblocks是开放源码软件。Codeblocks有纯粹的C++语言开发完成,它使用著名的图形界面库wxWidget(2.6.2unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。
第3章 概要设计
3.1功能设计
在这里详细介绍一下进入游戏后的选项:
(1)首先提示双方输入各自的姓名
(2)然后提示输入想要获胜需达到的分数n
(3)然后进入对弈界面,提示双方输入1-6来进行对弈
(4)当一方分数先达到n时,获胜
(5)若一直无人获胜,输出棋盘已满和棋
3.2程序结构
程序的结构如下图所示:
图3-3 结构图
3.3基本流程
根据游戏规则及其结构图,画出如下程序基本流程图:
第4章 程序实现
4.1主要变量及函数的说明
4.1.1主要变量
string person1; //第一个人的名字,注意:此人为先手人的名字
string person2; //第二个人的名字
int nnn; //先到达nnn分数的人获胜
int jiantoudirect; //控制箭头的指向,用来提升轮到谁下棋
int count[6]; //数组中存放6列元素的个数
char qipan[6][6]; //存放棋盘的数组
int point1; //第一个人的分数
int point2; //第二个人的分数
bool win; //判断是否有人获胜
4.1.2主要函数
Chess(); //Chess类的构造函数
void setperson1(string a); //设置玩家1的姓名
void setperson2(string b); //设置玩家2的姓名
void setnnn(int c); //设置先达到nnn分数的人获胜
void setdown(int c,char a); //落子的函数
bool isfull(int a) //查看单独的一列是否为空
bool allfull(); //查看整个棋盘是否为空的函数
friend ostream& operator<<(ostream& o,const Chess &t); //输出棋盘的函数
friend bool judgefour(Chess &t,int abc,int c); //判断输赢并消去棋子的函数
friend void downdown(Chess &t); //消去棋子后让上面棋子下落的函数
bool judgewin(); //判断是否有人获胜的函数
void playstart(); //开始游戏的函数
4.2主要功能的实现
4.2.1 落子的功能
这里面的c为待落子的列号,a为待填入数组中的字符(一共两种字符,分别代表游戏双方)
落子后的地方更改为相应的字符a。
4.2.2 输出棋盘
棋盘第一行输出双方玩家的姓名,中间有个箭头来回指向游戏双方,用来提示该轮到谁落子
第二行输出比赛双方的比分,之后输出整个棋盘
4.2.3查看输赢并消去棋子
根据刚下的棋子搜索其周围是否存在连四现象,一旦发现连四现象先删除除了刚下棋子的那些棋子,然后继续搜索,四个方向全部搜索完毕后再删除刚下棋子。
4.2.4消去棋子后让上面棋子下落的函数
分别单独判断每一列,如果发现棋子下面有空格,则上面的棋子下落填充。
实现的原理是:根据字符的大小进行排序,空格字符的远远大于代表玩家的那两种字符的大小
第5章 结果与讨论
5.1 运行结果截图
程序运行结果如下:
1. 进入游戏
图5-1 进入游戏
2. 游戏设置
图5-2 游戏设置
3. 游戏进行
图5-3 游戏进行
4. 游戏结束
图5-4 游戏结束
5.2程序的讨论与优化
在落子函数中,用到了排序算法,可以通过更高效的排序算法来进行优化。
参考文献:
(1) C++ 程序设计教程
第二篇:java猜数游戏课程设计报告
猜数游戏软件名:猜数游戏(分服务器端和客户端两部分)功能:游戏后台运行一个服务器软件,游戏者通过客户端程序登陆后,服务器随机产生一个1—100之间的随机数供游戏者猜,游戏者从客户端输入一个数值,如果该数比设定的数大,软件提示:“大了”,如果小,软件提示“小了”,若相等返回“猜对了,你共猜了*次”。服务器同时记录并维护一个游戏玩家的TOP10排行榜,供玩家查询。描述:服务器端:接收客户端的命令请求并提供相应的服务。客户端:完成游戏人机界界面的设计,以命令的方式向服务器请求服务,并显示相应的提示。主要的命令有:1.CONNECT??IP地址??端口号指定游戏服务器的IP地址和端口号,连接到服务器。响应:连接成功/失败。2.LOGIN 用户名用户登录,报告服务器玩家的名字。响应:成功/失败。3.GUESS 数字猜数。响应:大了/小了/对了。4.LISTTOP10??请求显示TOP10排行榜。响应:显示TOP10排行榜。5.EXIT退出游戏。服务端:import java.util.*;import java.io.*;import java.net.*;public class Server { DataInputStream netIn; DataOutputStream netOut;int GuanKa=0; //关卡ServerSocket serverscoket; Socket socket[]=new Socket[100]; //最多可以连接100个客户端int TopNumber[]=new int[10]; //排行榜数值String TopName[]=new String[10]; //排行榜名字int POST=444; //端口int numbegin=0,numend=100; //随机数开始值和结束值int number=0; //客户端猜的数值int Fen=100; //定义客户端得分int i=0; //连接数量String OptionNum=""; //客户端的菜单选择Server(){Login();}/*** 主方法 */public static void main(String[] args) {// TODO Auto-generated method stubServer s=new Server();s.Login();}/*** 连接,并对客户端传来的数据进行操作。*/public void Login(){try {serverscoket=new ServerSocket(POST);System.out.println("服务器开启...");InetAddress host=InetAddress.getLocalHost(); System.out.println("本机IP:"+host.getHostAddress().toString());socket[i]=serverscoket.accept();String ip=socket[i].getInetAddress().getHostName();System.out.println(ip+"连入服务器");netIn=new DataInputStream(socket[i].getInputStream());netOut=new DataOutputStream(socket[i].getOutputStream());OptionNum=netIn.readUTF(); //获取客户端的菜单选择System.out.println("对方选择:"+OptionNum);/** 如果对方选择"5"即退出,否则保持连接*/while(!OptionNum.equals("5")){if(OptionNum.equals("1")){ServerOut();}socket[i]=serverscoket.accept();netIn=new DataInputStream(socket[i].getInputStream());netOut=new DataOutputStream(socket[i].getOutputStream()); OptionNum=netIn.readUTF(); //获取对方选择信息System.out.println("对方选择:"+OptionNum); }} catch (IOException e) {
// TODO Auto-generated catch blockSystem.out.println("连接断开或数据错误!"); } }/*** 服务器反馈*/public void ServerOut(){int quess=10; //定义猜测次数int NumBer=RomDom(numbegin,numend); //生成从numbegin-numend的随机数System.out.println("生成的随机数为:"+NumBer); try {netOut.writeUTF("请输入"+numbegin+"到"+numend+"之间的数!\n您有"+quess+"次猜测!"); /** 如果客户端猜了五次或猜对了,则退出,否则继续循环.*/for(int j=1;j<=quess&&number!=NumBer;j++){ number=Integer.parseInt(netIn.readUTF()); netOut.writeUTF(ShuZiChaoZuo(NumBer,number)); //向客户端反馈结果if(ShuZiChaoZuo(NumBer,number).equals("恭喜您猜对了!")){socket[i].close(); //关闭本次连接}if(j==quess)netOut.writeUTF("这个随机数是:"+NumBer); } } catch (IOException e) {// TODO Auto-generated catch blockSystem.out.println("连接断开!");}}/*** 数字操作,即两个数比较,该方法需要添加两个整型参数,第一个是被比较的数,第二个是比较的数。*/public String ShuZiChaoZuo(int random,int x){ String str="";if(x>numend||x<numbegin){str="您猜的数字超出了范围,请输入"+numbegin+"-"+numend;}else{if(random==x){str="恭喜您猜对了!";}else if(random>x){str="您猜的数字过小!请重新输入!"; }else str="您猜的数字过大!请重新输入!"; }return str;}/*** 生成随机数字*/public int RomDom(int begin,int end){int romdom=0;numbegin=begin;numend=end;Random random=new Random();romdom=random.nextInt(end-begin)+begin;return romdom;}}客户端:import java.net.*;import java.io.*;public class Client {DataInputStream netIn;DataOutputStream netOut;InetAddress hostress;Socket socket;int POST=444;private String TGNum=""; //关卡选择/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubClient cn=new Client();cn.connecttoserver();}/*** 连接服务器*/public void connecttoserver(){BufferedReader hostname=new BufferedReader(new InputStreamReader(System.in));try {System.out.println("请输入主机IP或主机名:"); String hostip=hostname.readLine(); //输入主机名socket=new Socket(hostip,POST); //建立连接if(socket.isConnected()){System.out.println("连接成功!");}netIn=new DataInputStream(socket.getInputStream());netOut=new DataOutputStream(socket.getOutputStream());String XZ=""; /** 如果用户选择"5"则退出,否则继续.*/while(!XZ.equals("5")){ XZ=Option(); if(XZ.equals("1")){NumberInput(); //输入数字并接收服务器的反馈信息}else if(XZ.equals("4")){System.out.println("本程序代码由B004班向启燮编写,QQ:358801989");}else if(XZ.equals("5")){System.out.println("退出程序!");}elseif(XZ.equals("2")){System.ou
t.println("此功能待开发!");TollGate(); //关卡选择}socket=new Socket(hostip,POST);netIn=new DataInputStream(socket.getInputStream());netOut=new DataOutputStream(socket.getOutputStream());}} catch (IOException e) {// TODO Auto-generated catch blockSystem.out.println("服务器连接失败,请确认您的输入是否正确!");}}/*** 输入数字并接收服务器的反馈结果*/public void NumberInput(){String FK;BufferedReader shu=new BufferedReader(new InputStreamReader(System.in));try {FK=netIn.readUTF(); //获得数字的范围System.out.println(FK);for(int i=0;i<5;i++){String number=shu.readLine(); //输入猜的数netOut.writeUTF(number); FK=netIn.readUTF(); //获得猜测结果System.out.println(FK);if(FK.equals("恭喜您猜对了!")){break;}else if(i==4){FK=netIn.readUTF(); //获得服务器生成的随机数System.out.println(FK);System.out.println("您五次都没猜对,连接断开!");} }} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 选项*/public String Option(){System.out.println();System.out.println("1、开始游戏");System.out.println("2、关 卡");System.out.println("3、排 行 榜");System.out.println("4、关 于");System.out.println("5、退 出");BufferedReader xz=new BufferedReader(new InputStreamReader(System.in));String xzstr = null;System.out.println();System.out.print("选择:");try {xzstr = xz.readLine(); //用户选择netOut.writeUTF(xzstr); //把选择结果发送到服务器} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return xzstr; }/*** 关卡*/public void TollGate(){BufferedReader TGIn=new BufferedReader(new InputStreamReader(System.in));try {System.out.println("1、第一关");System.out.println("2、第二关");System.out.println("3、第三关");System.out.println("4、第四关");System.out.println("5、第五关");System.out.println("6、返 回");System.out.print("选择:");TGNum=TGIn.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}