版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、三子棋游戏程序姓名:李坤 学号:1002333115课程名称:游戏软件设计综合实训摘要 作为一名专科院校的大学生,很荣幸能有这次实训的机会。这次实训,收获颇丰。 本次实训报告主要解决了以下问题:1) 怎样调用外部函数和文件。用#include “”.2) 程序该做什么和怎么做。 三子棋应该怎么下,流程界面是什么?也就是(算法和数据结构)的问题。3) 与用户交互界面的设计。设计出比较完善的用户界面,提供游戏的规则和怎样使用等帮助。4) 进入游戏后棋盘界面的设计。5) 下棋等算法使用函数模块化表示出来。6) 整体程序清晰 , 注释明了,主观的让程序员能在今后修改和添加 , 客观的让阅读者理解每个函
2、数模块的功能及用途目 录 前言第一章.三子棋游戏软件功能描述 1.1 三子棋游戏简介- 1.2 软件功能描述-第二章.三子棋游戏软件的分析 2.1 软件总体设计方案 -2.2 各模块功能说明-第三章.开发及测试过程 3.1 开发- 3.2 测试- 第四章.源程序及使用说明书 -第五章.项目总结报告 -参考文献 前言首先很高兴能和大家一起来接受这次比较新鲜的实训,因为在以前我们的学习都没有过这种在代码中的合作。好的代码总是在不断的自我提升,好的程序员总是在不断自我提高,这次实训就是让我们进入编程世界的一个初步了解 ,而不是在我们以前学习中的一些情况。本次实训中我们学到很多关于程序的技巧方法和怎样
3、编写一个比较大的程序应该知道什么结构和算法,用高效率的数据结构和简洁的算法来描述一个程序是一个好的思想,但其中也不是唯一性的。好的想法总是在坏的方法中总结出来的,这次一个简单的三子棋程序让我们这些有可能从事程序这份工作的年轻人们豁然开朗,每次这样的实训都会给我们很大的启发和思路。时间匆匆,2周的实训时间很快就过去了,这次实训充分的巩固我们的C语言知识,而且让我们对于更深一层次有了一些皮毛的认知。总的来说,实训让我们对C语言有了更进一步的了解,不仅仅只是学到了关于编程的知识,更使我们对编程有了浓厚的兴趣,让我们在今后的编程过程中有了更多的基础和能力。 由于编者的水平有限,报告中难免有疏漏,不当之
4、处,敬请专家和读者批评和指正。三子棋游戏软件功能描述 1.1 三子棋游戏简介三子棋是一种两人对弈的纯策略型棋类游戏,棋子分为黑和白,两人对棋,各自拿着一种颜色,轮流下棋,如果碰到一方三子出现三个同色棋子(横、竖,斜任何一个方向)就可以取胜。1.2 软件功能描述1.用户进入游戏后选择3项其中之一:游戏开始、游戏规则、或者直接退出游戏 2.用户进入游戏开始界面后,仍需选择白方还是黑方首先下棋。3.用户进入游戏规则界面后,可以查看游戏使用方法和获胜条件。4.用户进入游戏后,根据屏幕的棋图输入1,2,3。 每次输入一个值后,程序响应,重新画出一个棋盘上面的你所输入的值 随之改变,黑棋为'h
5、39;,白棋为'b '。5. 当其中一个玩家出现三个同色棋子(横、竖,斜任何一个方向),程序会 提示哪位用户获得胜利。6. 用户获得胜利后,程序随之会告知用户到底是继续游戏还是退出游戏。 详细内容 首先进入游戏界面 " 欢迎来到三子棋游戏世界", " 1.游戏开始 ", " 2.游戏规则 ", " 3.退出游戏 " 开始游戏 开始选择棋子 " 选择棋子 ", " 1. 白方 ", " 2. 黑方 " 进入后随之出现棋盘" 1 2
6、3 ", " 4 5 6 ", " 7 8 9 ", 游戏胜利,提示胜利方 (黑棋/白棋)胜利 并且告知用户是否想再来一局 "是否继续一句", " 1.是 2.否 ",游戏规则 " 游戏规则 ", "三子棋游戏类似于五子棋游戏,用户根据提示输入1,2,3,4等数值且棋"“画面会随之改变只要横,竖,斜,任一方向能够构成三个同种颜色的棋子" " 是否继续 ", " 1.是 2. 否 " 退出游戏 出现是否退出该游戏界面(
7、1.是 2.否) 选择1出现开始游戏界面,选择2退出该游戏 " 退出游戏 ", " 是否退出该游戏 ", " 1.是 2.否 "三子棋游戏软件的分析2.1 软件总体设计方案 Main( )和“游戏”函数的主要思想。#include <stdio.h>#include <stdlib.h>#define 甲 0#define 乙 1void 走 ( int , char 3 , int ) ; void 显示 ( char 3 , int ) ; int main( void ) char 棋盘33 = 1,2,
8、3, 4,5,6, 7,8,9, ; int 该谁走 = 甲 ; do 显示 ( 棋盘 , 3 ) ; / 走 ( 该谁走 , 棋盘 , 3 ) ;/ if(判断是否有结局( 棋盘 , 3 )/ / break ; / / 交换; while(1); / 宣布结果 system("PAUSE"); return 0;N-S 数据的设计 整体程序使用二维数组来处理数据 , 文件使用#include“”外部引用的方法 ,程序结构使用循环语句dowhile(1);来不停的循环直到出现break强制语句结束。整个程序运行结束2.2 各模块功能说明 int zou( int , ch
9、ar SHUL , int ) ; /下棋 int panduan( char SHUL ) ; / 判断输赢 void shuchu( char ( * ) 80 , int ) ; /输出每个与用户交互画面 void space( void ) ; /游戏主界面 void begin( void ) ; /游戏开始界面 int help( void ) ; /游戏规则界面 void xzqz( void ) ; /选择棋子界面 void qipan( void ) ; /棋盘界面 void pdend( void ) ; /判断退出 void end( void ) ; /退出游戏 voi
10、d again( void ) ; /再来一局 int pdagain( void ) ; /判断是否再来一局开发及测试过程 3.1 开发 程序初期考虑使用图形函数来完成,因为比较普遍使用,但是因为 时间的进程,我们决定独出,使用二维数组和外部文件的引用来完成简单的棋盘等方面必须用图形函数完成的美观问题。 前期主函数代码准备使用2格死循环来完成从帮助中和游戏结束是重新玩游戏来使用。代码如下: int main( void ) do index( ); /主界面 do scanf("%c" , &key ); if( key = y | key = n | key =
11、 t) break ; while( 1 ) ; system(" cls "); if( key = n | key = t ) break ; while( 1 );但是鉴于程序后期复杂性 , 调用之间的相互问题,所以前期方案被摒弃,后来使用了一个循环来完成,帮助和继续使用函数调用来逐步完善。一些文件的调用我们遵循师者,使用了外部引用:#include " "。整个程序因此看上去非常精炼和简单。 我们将整个程序分成多个模块函数,分别如下: int zou( int , char SHUL , int ) ; /下棋 int panduan( char
12、 SHUL ) ; / 判断输赢 void shuchu( char ( * ) 80 , int ) ; /输出每个与用户交互画面 void space( void ) ; /游戏主界面 void begin( void ) ; /游戏开始界面 int help( void ) ; /游戏规则界面 void xzqz( void ) ; /选择棋子界面 void qipan( void ) ; /棋盘界面 void pdend( void ) ; /判断退出 void end( void ) ; /退出游戏 void again( void ) ; /再来一局 int pdagain( vo
13、id ) ; /判断是否再来一局因此每个程序模块都有它唯一性的功能,并且遵循老师的意见,函数模块“一进一出”程序考虑的几个函数之间的来反调用(游戏开始,游戏规则,退出游戏,选择棋子,出现棋盘),然后利用二维数组与坐标相结合的方法来实现下棋和行棋这些功能的,最后判断使用横,竖,斜3个方向的坐标的值来判断是否成为一条线中3子相同。判断的模块是整个程序编写过程中最难的,怎样判断这个问题可是经过我们同学之间不断的探讨总结出来的方案,虽然可能是格简单的算法,但是我们的的确确实现了初期的功能。3.2 测试 测试是一个比较漫长的路途,一开始我们就根据老师的方法,在每写一段代码后就使用编译器编译一下,这样减少
14、我们在语法上的错误,因此,在整个开发的过程中语法错误被直接的减少,因为即使的更改,但是一个程序语法错误是最烂的错,程序中如果出现逻辑错误这是一个大头子问题,比如,用户输入的数是这个,然后进行运算过后却出现了如预期不等的数值,这是最严重的。所以在整个程序编写玩后,我们对每一模块功能都单独的进行了测试,的却,测试出许许多多不等的问题。下面前期测试出的错误和垃圾代码如下: /主界面 void index( ) int i = 0 , j = 0 ; char space2080= #include "三子棋界面.txt" ; for(i = 0 ; i < 5 ;i+) f
15、or( j = 0 ; j< 80 ; j+) printf("%c" , spaceij ); printf("nn请输入选项:"); /选择选项 void select( ) int selectkey = 0 ; scanf("%d" , &selectkey); switch( selectkey ) case 1 : begin( ) ;break; case 2 : help( );break; case 3 : end( ); break; 以上是我们前期制作的代码,经过测试在外部引用的时候,模块函数有逻辑
16、上的错误。因此测试的过程中将这2段函数摒弃,并使用经过老师指导同学的讨论总结的2段代码。源程序及使用说明书1. 源代码#include<stdio.h>#define ONE 1#define TWO 2#define SHI 1#define FOU 2#define BAIFANG 0#define HEIFANG 1#define HENG 3#define SHUL 3#define SIZE( a ) ( ( sizeof ( a ) / sizeof *( a ) ) ) int zou( int , char SHUL , int ) ; /下棋int panduan
17、( char SHUL ) ; / 判断输赢void shuchu( char ( * ) 80 , int ) ; /输出每个与用户交互画面void space( void ) ; /游戏主界面void begin( void ) ; /游戏开始界面int help( void ) ; /游戏规则界面void xzqz( void ) ; /选择棋子界面int qipan( int ) ; /棋盘界面void pdend( void ) ; /判断退出void end( void ) ; /退出游戏void again( void ) ; /再来一局int pdagain( void ) ;
18、 /判断是否再来一局/主函数int main( void ) do int xuanze; space( ); printf( "请选择:" ) ; scanf( "%d" , &xuanze ) ; system( "CLS" ) ; switch( xuanze ) case 1 : begin( ) ; break ; case 2 : help( ) ; break ; case 3 :end( ) ;break ; while( 1 );return 0 ; /进入游戏界面void space( void ) cha
19、r space 15 80 = #include " 游戏主界面.txt "shuchu( space , SIZE( space ) ) ; /开始游戏界面void begin( void )char begin 15 80 = #include " 选择棋子.txt "shuchu( begin , SIZE( begin ) ) ; xzqz( ) ; /选择棋子void xzqz( void ) int select = 0 ;printf( " 请选择 : " ) ;scanf( "%d" , &
20、select ) ;system( " CLS " ) ; if( select = HEI ) printf( "选择是黑棋n" ) ;qipan( HEIFANG ); else printf(" 选择是白棋n " ) ;qipan( BAIFANG ); /棋盘int qipan( int gsz )char qipan 5 80 = #include "棋盘棋子.txt"shuchu( qipan , SIZE( qipan ) ) ; zou( gsz , qipan , HENG ) ; /规则int
21、help( void )int select = 0 ;char help1580= #include "游戏规则.txt"shuchu( help , SIZE( help ) ) ;printf ( " 请选择: " ) ;scanf( "%d" , &select ) ;system( "CLS" ) ;if( select = ONE ) space( ) ; begin( ) ;else return 0 ; /退出void end(void)char end1580= #include &quo
22、t;游戏退出.txt" ;shuchu( end , SIZE( end ) ) ;pdend( ) ; /判断是否真的要退出void pdend( void ) int pd = 0 ;printf( "请选择: ") ;scanf( "%d" , &pd) ;system( "CLS" ) ;if( pd = SHI ) printf("退出游戏n");else begin( ) ; /输出结果void shuchu( char ( *p ) 80 , int n )int i ;for( i
23、 = 0 ; i < n ; i+ )puts( *( p + i ) ) ; /走棋int zou( int hsz , char qipan 3 , int n) int hang , lie , geshu = hsz ;char zouqi ;while( geshu < 9 ) if( geshu % 2 = 0 ) printf( "请黑棋走:n" ) ; scanf( "%c" , &zouqi) ; system( "CLS" ) ; else printf( "请白棋走:n"
24、); scanf("%c",&zouqi ); system( "CLS" ) ; for( hang=0 ; hang < n ; hang+ ) for( lie = 0 ; lie < n ; lie + ) if( zouqi = qipan hang lie ) if( geshu % 2 = 0 ) qipan hang lie = 'h' ; if( panduan( qipan ) ) printf( "黑棋赢n" ) ; printf( "是否想再来一局n" )
25、 ; again( ) ; else qipan hang lie = 'b' ; if( panduan( qipan ) ) printf( "白棋赢n") ; printf( " 是否想再来一局n " ) ; again( ) ; geshu+ ; shuchu( qipan , n ) ;printf("和棋n") ; return 0; /判断输赢int panduan( char qipan SHUL )int hang , lie ;for( hang = 0 ; hang < 3 ; hang +
26、 )for( lie = 0 ; lie < 3 ; lie + ) if( qipan hang lie = qipan hang lie + 1 && qipan hang lie = qipan hang lie + 2 | qipan hang lie = qipan hang + 1 lie && qipan hang lie = qipan hang + 2 lie | qipan hang lie = qipan hang + 1 lie + 1 && qipan hang lie = qipan hang + 2 lie +
27、 2 | qipan hang lie +2 = qipan hang + 1 lie + 1 && qipan hang lie + 2 = qipan hang+2 lie ) return 1 ; return 0 ; /再来一局void again( void ) char again 15 80 = #include "再来一局.txt"shuchu( again ,SIZE( again ) ) ;pdagain( ) ; /判断是否再来一局int pdagain( void ) int pd ;printf( "请选择:" ) ;scanf( "%d" , &pd ) ;system( "CLS" ) ;if( pd = SHI ) be
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年鲁班技能细节教学设计
- 2025-2026学年高中政治教学设计原创
- 21 仿生建筑模型大比拼 教学设计科学六年级下册冀人版
- 2025-2026学年密度教学设计缺陷
- 2025-2026学年课的拼音教学设计幼儿园
- 2025-2026学年明胶制作教学设计
- 设计院实习报告(17篇)
- 食品公司毕业实习报告(13篇)
- 2025-2026学年梅花古诗软笔教学设计
- 广东省高中物理 学业水平测试冲A 第7章 电磁现象与规律教学设计(含解析)
- 2026年卫生信息化系统管理岗医疗卫生事业招聘考试笔试试题(含答案)
- 大学英语四级词汇表 (完美打印版)
- 精神科患者的团体治疗护理
- DB54∕T 0533-2025 公路养护预算指标(定额)
- 5.1《从小爱劳动》课件 统编版道德与法治三年级下册
- 高校教师资格证之高等教育学完整版及答案【历年真题】
- 儿童智力障碍课件
- T/CIS 67002-20213种剧毒鹅膏菌的物种鉴别PCR扩增-Sanger测序法
- 仁爱科普版(2024)七年级下册英语期末复习:语法填空+阅读理解+完型填空 解题技巧+练习题汇编(含答案解析)
- 《高速公路互通式立交桥设计原理》课件
- 社会工作概论课件
评论
0/150
提交评论