连四游戏课程设计报告

时间:2024.4.5

第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();} }}

更多相关推荐:
打砖块游戏课程设计报告

目录第1章程序设计专题目的与要求111程序设计目的112程序设计的实验环境113程序设计的预备知识114程序设计要求1第2章程序设计内容221概要设计222程序整体设计说明223程序部分源代码及注释824测试结...

24点游戏课程设计报告

目录123基本功能描述2设计思路2软件设计431设计步骤432界面设计533关键功能实现6331发牌功能的实现6332计时功能的实现7333计算功能的实现7334验算功能的实现94567结论与心得体会9参考文献...

游戏24点课程设计报告

游戏24点课程设计报告一题目分析类计算24点任意输入4位数字利用四则运算使之得到结果24输出所有不同算法的计算表达式可为运算优先级而使用括号二问题分析1全面性此问题要求输出结果为24的计算表达式并且要求输出要全...

java_扫雷游戏课程设计报告

滨江学院20xx20xx学年第2学期数字图像处理课程论文专业姓名学号20xx年06月05日设计通信编程课程论文Java设计扫雷游戏王李超20xx2334038南京信息工程大学滨江学院电子工程系南京210041设...

FLASH页面游戏课程设计报告

FLASH页面游戏课程设计报告第一章绪论11课题背景意义随着社会的不断发展人们的生活水平在不断地提高网络游戏也越来越多的融入到人们的生活中去游戏的出现带来了网络上的优势扩宽了人们平时玩的传统游戏的界限给人们带来...

动画与游戏设计 课程设计报告

动画与游戏开发课程报告学号1111020xx103姓名张慧专业班级11级计科本01班日期电子信息工程学院1目录一课程内容及应用领域11基于DirectX的粒子系统3111粒子系统简介3112广告板技术3113粒...

unity3d游戏课程设计报告

游戏程序设计课程报告课程Unity3D课程设计题目班级学号姓名日期一摘要1UNITY游戏是一种新型的IT引擎我们研究主要内容是UNITY游戏设计方法指以游戏客户端软件为信息交互窗口的旨在实现娱乐休闲交流和取得虚...

扫雷游戏程序设计课程设计报告

课程设计设计题目学生姓名学专业班级20xx年11月5日合肥工业大学课程设计任务书一设计任务1鼠标左击排雷右击插小旗打问号2方格里面的数字表示方格周围的雷数3能够显示未标记雷数和游戏用时4雷区上面的小脸可以变化显...

塔防游戏课程设计报告

西安科技大学程序设计综合实训课程设计报告题目塔防小游戏专业网络工程姓名张悦董艳妮李亚楠卢一瑶20xx年1月3号1目录1绪论211选题目的及意义或本课题的开发背景212系统概述213人员组成及分工22需求分析23...

猜数字游戏课程设计报告

第一章课程设计的目的和要求11课程设计的目的用高级程序语言设计出猜数字游戏系统实现猜数字游戏通过用高级程序语言制作程序熟悉用高级程序语言编程的操作和步骤学习高级程序语言的运用以及高级程序语言实验报告的书写格式1...

C++课程设计--福彩游戏设计报告

南京理工大学VC++课程设计报告课程:VC++课程设计选题名称:福彩游戏一、程序设计要求(1)定义一个福彩类,封装计算机开出的大奖号码及开奖过程函数和输出大奖号码的函数。(2)定义一个用户类,封装用户输入的数字…

java游戏开发课程设计报告

JAVA游戏开发课程设计报告题目网络益智游戏姓名学号专业班级云红卫081012130软件技术软件082计算机科学与技术系20xx年6月目录1实践过程概述32课程设计题目描述33系统需求分析与设计331系统需求分...

游戏课程设计报告(36篇)