在日常学习、工作或生活中,大家总少不了接触作文或者范文吧,通过文章可以把我们那些零零散散的思想,聚集在一块。那么我们该如何写一篇较为完美的范文呢?下面是小编为大家收集的优秀范文,供大家参考借鉴,希望可以帮助到有需要的朋友。
用c语言编写扫雷游戏篇一
题目: 扫雷小游戏设计
电子通信与物理学院 日期:2018年7月 12 日
指导教师评语
目录
1.课程设计内容...........................................................................................................1 2.课程设计目的...........................................................................................................1 3.背景知识..................................................................................................................1 4.工具/准备工作..........................................................................................................3 5.设计步骤、方法.....................................................................................................3
5.1........................................................................................................................3 5.2定义全局变量..................................................................................................4 5.3挖雷部分函数的分析.......................................................................................5 6.设计结果及分析.....................................................................................................11 7.设计结论...............................................................................................................16 8.参考文献...............................................................................................................17 附录...........................................................................................................................17
1.课程设计内容
在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。
扫雷游戏是windows操作系统自带的一款小游戏,在过去的几年里,windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用c-free编写了与它功能相仿的挖地雷游戏,寓学于乐。
即:设计一个功能与windows中的挖雷游戏相同的小游戏。
2.课程设计目的
1.培养学生综合运用所学知识独立完成课题的能力。
2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。4.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核
3.背景知识
游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于 右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为9*9个方块10个雷,中级为16*16个方块40个雷,高级为16*30个方块99个雷,自定义级别可以自己设定雷区大小和雷数,但是雷区大小不能超过24*30),玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。
游戏的基本操作包括左键单击(left click)、右键单击(right click)、双击(chording)三种。其中左键用于打开安全的格子,推进游戏进度;右键用于标记地雷,以辅助判断,或为接下来的双击做准备;双击在一个数字周围的地雷标记完时,相当于对数字周围未打开的方块均进行一次左键单击操作:
左键单击:在判断出不是雷的方块上按下左键,可以打开该方块。如果方块上出现数字,则该数字表示其周围3×3区域中的地雷数(一般为8个格子,对于边块为5个格子,对于角块为3个格子。所以扫雷中最大的数字为8);如果方块上为空(相当于0),则可以递归地打开与空相邻的方块;如果不幸触雷,则游戏结束。
双击:同时按下左键和右键完成双击。当双击位置周围已标记雷数等于该位置数字时操作有效,相当于对该数字周围未打开的方块均进行一次左键单击操作。地雷未标记完全时使用双击无效。若数字周围有标错的地雷,则游戏结束,标错的地雷上会显示一个“ ×”(见下图)
扫雷的设计原理: 扫雷游戏分为几个步骤: 第一步,使用二维数组表示地图; 第二步,随机生成几个地雷;
第三步,点击方格的反应,计算每个非雷区方格点开后的数字; 第四步,当方格数字为0的情况; 第五步,当方格为地雷的情况。
第一步地图的大小和第二步地雷的数量都应该是程序中给定的,或者玩家输入的。这个是多少自己决定吧。第三步,计算非雷区方格点开后的数字就把这个方格在二维数组中周围八个方向的方格是否是地雷都检查一遍,一定要注意不要越出数组边界。这个数字可以在游戏初始化时全都计算好,也可以在玩家点击的时候再计算。点 击非雷区方格,显示数字,这个方格标记为“已点过”。第四步,当方格数字为0时,这里要用到递归调用,就是让程序自动“点击”这个数字为0方格周围的八个方格,然后再看结果,如果不是0,就停止,如果是0,依然递归调用,直到没有0为止,或者直到点遍所有方格为止,一定要注意不要越出数组边界。第五步,很简单,宣布玩家死亡就可以了。
4.准备工作
查阅相关资料,了解扫雷的的玩法,了解扫雷的设计思想方法。借鉴他人写过的程序,从中找到突破口。从程序中了解需要的各种函数准备,再进一步获悉该函数的功能与使用方法。
对自己要设计的挖地雷游戏进行功能分析,大致如下:
总体游戏过程分析:在屏幕上显示一个游戏界面,雷区范围内预先埋设了一定数量的随机分布的地雷(用数字9代替地雷);玩家通过从键盘中输入(行数x,列数y)↙进行点击;若能点中所有非雷区,则游戏胜利;否则踩雷,游戏失败。简易版扫雷游戏要具备以下功能:
1)开局:首先选择游戏等级,然后生成不同等级的雷区界面。游戏等级分 为三级:各等级行列数为———:简单:10×
10、普通:15×
15、困难:20×20;雷区每个*号下面或埋藏有1个地雷,或者没有地雷;
2)挖雷:从键盘中输入(行数x,列数y),并按回车键,可挖开它;若所揭方块下有9,则踩雷,此时所有含地雷的块都出现9,该局游戏失败;如果方块上出现数字,它代表 在它周围的8个方块中共有多少颗地雷;
3)输入:通过键盘输入相关指示信息; 4)输出:提示游戏失败,是否继续再来一遍;
5.设计步骤、方法 5.1主函数第一步,写出主程序的基本框架,确定各子模块名字和参数。具体的函数流程如图5-3 所示:
定义使用到的常数、全局变量、函数原型说明。然后初始化图形系统,调用游戏控制函数,游戏只接受键盘,通过鼠标结束游戏,关闭系统,退出游戏。
主控模块的各子模块说明:
void initialvalue_game()用于棋盘初始化; initialmine_game()用于棋盘的随机布雷; void print_game()用于打印棋盘; int judge_game()用于判断游戏是否结束; int openmap()用于点开地图;
5.2定义全局变量
#include
#include “stdlib.h” #include“time.h” # define s 20 int x;/*棋盘行数*/ int y;/*棋盘列数*/ int b;/*选择游戏难度 1简单2普通3困难4 自定义*/ int h;/*雷的个数*/ struct games g;struct games { int game_int[s][s];char game_char[s][s];};使用结构体数组来完成棋盘的定义,引用时间头文件来完成对随机布雷的随时性。
5.3挖雷部分函数的分析void initialvalue_game(struct games *g){ int i,j;for(i=0;i
initialmine_game(struct games *g){ 5 int i,j,next1,next2;int sum=0;srand((unsigned)time(null));while(1){ i=rand()%x;j=rand()%y;if((*g).game_int[i][j]==9)continue;(*g).game_int[i][j]=9;++sum;for(next1=-1;next1<2;next1++){ for(next2=-1;next2<2;next2++){ if(-1
void print_game(struct games *g,int logo){ int i,j;int a[s];for(i=0;i
int judge_game(struct games *g){ int sum=0;int i,j;for(i=0;i
运行第一步:
按enter键进入: 11
选择游戏难度(简单、普通、困难、任意),按enter键进入: 简单难度: 普通难度:
困难难度:
任意难度:
游戏界面,开始从键盘输入数字,格式为(行数x,列数y),点击enter键:
游戏结束页面: 7.设计结论
一学期结束了,对c语言也有了一些认识,不过自我感觉学得不太好,好在还是学到了知识: 了解了c的发展以及编程的基本步骤,学会了printf输出语句,c语言的运算,知道了有哪几种数据类型,还有我觉得经常用的if语句,if--eles语句,for循环,while 语句,do-while语句等等,基本会用数组和指针,还有字符串的处理,对了还有才学的结构体。
还有许多知识点,不一罗列了,总之c语言要学的东西太多了,听大三的都说c很简单,但我并不认为他像人们说的那样简单,c是最基础的,基础不代表简单,也可能是我没学好才有这样的感受。
在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。
8.参考文献
郭翠英主编的《c语言课程设计实例精编》; 张芳妮 吕波 译《c语言编程常见问题解答》; 谭浩强《c程序设计题解与上机指导(第二版)》。课程设计与系统开发案例[m].北京
附录:
#include
#include “stdlib.h” 17 #include“time.h” # define s 20 int x;/*棋盘行数*/ int y;/*棋盘列数*/ int b;/*选择游戏难度 1简单2普通3困难4 自定义*/ int h;/*雷的个数*/ struct games g;struct games { int game_int[s][s];char game_char[s][s];};
main(){ int i,j;/*定义i,j变量*/ int no;int begin=1;int h;/*确定雷的个数*/ while(begin){ printf(“nnnnnnn” “ttt=================================n” “ttt 欢迎进入扫雷 nnn” “ttt 按回车键继续 n” “ttt=================================n” “ttt n”);getchar();/*游戏开始界面*/ system(“cls”);printf(“ nnnnnnnnn”);printf(“ 请选择游戏难度:nn”);printf(“ 1简单难度nn”);printf(“ 2普通难度nn”);printf(“ 3困难难度nn”);printf(“ 4自定义难度nn”);scanf(“%d”,&h);getchar();/*确定游戏难度*/ if(0void initialvalue_game(struct games *g){ int i,j;for(i=0;i
initialmine_game(struct games *g){ int i,j,next1,next2;int sum=0;srand((unsigned)time(null));while(1){ i=rand()%x;j=rand()%y;if((*g).game_int[i][j]==9)continue;(*g).game_int[i][j]=9;++sum;for(next1=-1;next1<2;next1++){ for(next2=-1;next2<2;next2++){ if(-1
void print_game(struct games *g,int logo){ int i,j;int a[s];for(i=0;i
int judge_game(struct games *g){ int sum=0;int i,j;for(i=0;i
用c语言编写扫雷游戏篇二
中南大学
程序设计基础实践报告
学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完成时间 2014.1 题 目 设计一个和window系统类似的小游戏【挖地雷】
《计算机程序设计实践》 目录
1.课程设计内容.............................................................................................3 2.课程设计目的.............................................................................................3 3.背景知识....................................................................................................3 4.工具/准备工作............................................................................................5 5.设计步骤、方法.........................................................................................5
5.1.步骤1:步骤名称(二级标题).......................................................错误!未定义书签。
步骤1.1:步骤名称(三级标题)..............................................................................5 5.1.1.5.2.5.3.步骤2:步骤名称..........................................................................错误!未定义书签。步骤n:步骤名称..........................................................................错误!未定义书签。
6.设计结果及分析.........................................................................................5 7.设计结论..................................................................................................15 8.问题及心得体会.......................................................................................16 9.对本设计过程及方法、手段的改进建议....................................................17 10.参考文献..................................................................................................17
《计算机程序设计实践》
printf(“请输入棋盘行列数(小于20且用逗号隔开):”);
scanf(“%d,%d”,&x,&y);
getchar();
printf(“请输入雷的个数:”);
scanf(“%d”,&b);
getchar();
break;
}
break;
}
else
{
printf(“输入错误请重新输n”);
}
} while(begin){
system(“cls”);
initialvalue_game(&g);
initialmine_game(&g);
print_game(&g,2);
no=1;
while(no)
{
printf(“please choose:”);
scanf(“%d,%d”,&i,&j);getchar();if(-1
{
switch(openmap(&g,i-1,j-1))
{
case 1:
print_game(&g,1);
printf(“游戏结束!按回车键再来一局n”);
《计算机程序设计实践》
if(getchar()=='n')begin=1;
else begin=0;
no=0;
break;
case 2:
if(judge_game(&g)==b)
{
printf(“win!n”);
print_game(&g,1);
printf(“按回车键再来一局n”);
if(getchar()=='n')begin=1;
else begin=0;
no=0;
break;
}
else print_game(&g,2);no=1;break;
default:break;
}
}
else
{
printf(“你输入错误!请重新输入n”);
} } } }
用c语言编写扫雷游戏篇三
中南大学
程序设计基础实践报告
学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完成时间 2014.1 题 目 设计一个和window系统类似的小游戏【挖地雷】
《计算机程序设计实践》错误!未指定书签。
目录
1.课程设计内容.............................................................................................3 2.课程设计目的.............................................................................................3 3.背景知识....................................................................................................3 4.工具/准备工作............................................................................................5 5.设计步骤、方法.........................................................................................5
5.1.步骤1:步骤名称(二级标题).......................................................错误!未定义书签。
步骤1.1:步骤名称(三级标题)..............................................................................5 5.1.1.5.2.5.3.步骤2:步骤名称..........................................................................错误!未定义书签。步骤n:步骤名称..........................................................................错误!未定义书签。
6.设计结果及分析.........................................................................................5 7.设计结论..................................................................................................15 8.问题及心得体会.......................................................................................16 9.对本设计过程及方法、手段的改进建议....................................................17 10.参考文献..................................................................................................17
《计算机程序设计实践》错误!未指定书签。
case 4:
system(“cls”);
printf(“请输入棋盘行列数(小于20且用逗号隔开):”);
scanf(“%d,%d”,&x,&y);
getchar();
printf(“请输入雷的个数:”);
scanf(“%d”,&b);
getchar();
break;
}
break;
}
else
{
printf(“输入错误请重新输n”);
}
} while(begin){
system(“cls”);
initialvalue_game(&g);
initialmine_game(&g);
print_game(&g,2);
no=1;
while(no)
{
printf(“please choose:”);
scanf(“%d,%d”,&i,&j);getchar();if(-1
{
switch(openmap(&g,i-1,j-1))
{
case 1:
《计算机程序设计实践》错误!未指定书签。
print_game(&g,1);
printf(“游戏结束!按回车键再来一局n”);
if(getchar()=='n')begin=1;
else begin=0;
no=0;
break;
case 2:
if(judge_game(&g)==b)
{
printf(“win!n”);
print_game(&g,1);
printf(“按回车键再来一局n”);
if(getchar()=='n')begin=1;
else begin=0;
no=0;
break;
}
else print_game(&g,2);no=1;break;
default:break;
}
}
else
{
printf(“你输入错误!请重新输入n”);
} } } }
用c语言编写扫雷游戏篇四
指导教师学院专业班级学号姓名实验室
实验题目:
实验要求:
实验内容及步骤:
运行结果
心得体会:
用c语言编写扫雷游戏篇五
实 验 报 告
专业
软 件 工 程
班级
x
班
学号_ xxxxxxxxxxx_
姓名
实验日期:201x年x月x日
报告退发(订正、重做)
课程
c程序设计实验
实验名称
函
数
一、实验目的
① 熟练掌握c程序中函数的定义; ② 掌握函数的调用,函数参数的传递; ③ 熟练掌握函数的嵌套调用和递归调用;
二、实验环境(描述实验的软件、硬件环境)
① 软件环境:windows xp/win7等操作系统,microsoft visual c++ 6.0编译器; ② 硬件环境:pc机一台
三、实验内容、步骤和结果分析
题目一:编写一个用来判断质数(素数)的函数。
要求:
(1)在main函数中调用该函数对输入的数值进行判断,并输出判断结果;(2)当输入数值<=1时,停止输入和判断。
#include
#include
/*=======判断质数(素数)的函数=======*/ int judgeprime(int n){
} /*=======判断质数(素数)的函数=======*/ int main(){printf(“n提示:输入一个数字来判断是否是质数(素数),当输入数值<=1时,停止输入和判断。nn”);for(int num=2,temp;num>1;){ printf(“please enter a number:”);for(int i=2;i<=sqrt(n);i++)//一个数n如果是合数,那么它的所有的因子不超过n的开方 {
} return 1;if(n%i==0)return 0;else continue;
}
} scanf(“%d”,#);if(num<=1)break;//当输入数值<=1时,停止输入和判断 temp=judgeprime(num);if(temp==0)printf(“%d is not a prime numner!nn”,num);else printf(“%d is a prime numner!nn”,num);return 0;
题目二:使用习题1中所编写的判断质数的函数验证哥德巴赫(goldbach)的1+1猜想-----任何一个>=6的偶数都可以表示成两个素数之和
要求:
① 屏幕提示用户一个>=6的偶数;
② 输出这个偶数等于2个素数之和的表达式; ③ 当输入数据<6或者不是偶数时,停止输入和验证。
#include
#include
/*=======判断质数(素数)的函数=======*/ int judgeprime(int n){
for(int i=2;i<=sqrt(n);i++)//一个数n如果是合数,那么它的所有的因子不超过n的开方 {if(n%i==0)return 0;else continue;
} } return 1;//true-->1,false-->0 /*=======验证哥德巴赫猜想的函数(调用judgeprime)=======*/ int provegoldbach(int m){
} int main(){
}
printf(“n提示:输入一个偶数来验证哥德巴赫猜想,当输入数值<6时,停止输入和判断。nn”);for(int num=6;num>=6;){
} int temp;printf(“please enter a number:”);scanf(“%d”,#);temp=provegoldbach(num);if(temp==0)//当输入小于6或者不是偶数时结束 return 0;printf(“==================================”);if(m<6||m%2!=0){
} if(judgeprime(j)==1&&judgeprime(m-j)==1)//判断两数是否都等于质数 { } printf(“t%d = %d + %dn”,m,j,m-j);return 0;//判断是否大于等于6或者不是偶数 for(int j=2;j<(m/2);j++)
题目三:编写一个求阶乘的函数,接着调用该函数实现组合的求解要求:
① 提示用户输入n和m的数值; ② 输出的 结果
#include
/*=======阶乘函数=======*/ int fac(int n){
} /*=======组合函数=======*/ int combine(int m,int n){ } /*=======main函数=======*/ void main(){int m,n;int res;printf(“n提示:这是求组合求和公式的函数,输入两个整数(分别为上标和下标)nn”);scanf(“%d%d”,&m,&n);if(m>n)//判断上标大于小标重新输入 goto loop;return fac(n)/(fac(n-m)*fac(m));int f;if(n<0)printf(“n<0,data error!”);f=1;else if(n==0||n==1)else f=fac(n-1)*n;return f;loop:printf(“please enter two numbers:”);
}res=combine(m,n);printf(“tresult is %dn”,res);
题目四:编写一个求矩阵中最大元素以及最小元素的函数selectmaxandmin(),在main函数中调用该函数
要求:
最大值和最小值的输出操作,可以放在selectmaxandmin()函数中
#include
#define row 4//矩阵的行 #define column 4//矩阵的列
/*=======在矩阵中选择最大最小数的函数=======*/ void selectmaxandmin(int arry[row][column])//用指针更方便 {int tempmax,tempmin;if(arry[0][0]>arry[0][1])//赋初始值 {
} else {
} for(int i=0;i
}
} for(int j=0;j
} if(arry[i][j]>tempmax){ } if(arry[i][j]
} int mat[row][column];printf(“please enter a %d x %d matrix:n”,row,column);for(int i=0;i
} selectmaxandmin(mat);return 0;for(int j=0;j
题目五:编写一个编码原文的函数,对于给定的内容,按照敌方的规律对其进行编码
要求:
某日,我军某部截获了一份敌方电报,经过仔细分析后发现:该电文中所有的字母字符都是经过某种运算后得到的,然那些非字母字符则没有经过任何处理。例如,原文中的字符a对应电文中的字符e,原文中的字符b对应电文中的字符f,原文中的字符w对应电文中的字符a,原文中的字符!在电文中仍为!
#include
#define size 20
//定义大小 /*=======密码翻译的函数=======*/ char trans(char a){} //主函数 int main(void){
printf(“请输入原文:nnn”);char str[size];gets(str);printf(“nnn”);if((a>='a'&&a<='v')||(a>='a'&&a<='v')){ } else {
} if(a>='w'||a>='w'){ } else { return a;} return a-22;return a+4;
}printf(“正在破解……nnn”);printf(“破译的原文是:”);for(int i=0;i<20;i++){
} printf(“n”);str[i]=trans(str[i]);if(str[i]=='')//判断是否结束 break;printf(“%c”,str[i]);
题目六:编写一个函数,求解输入矩阵的转置矩阵并输出
#include
#define row 3//矩阵的行 #define column 4//矩阵的列 /*=======矩阵的输入函数=======*/ void matinput(int mat[][column]){
} /*=======原始矩阵的打印函数=======*/ for(int i=0;ifor(int j=0;j
} printf(“请输入矩阵元素 [%d][%d]=:”,i,j);scanf(“%d”,&mat[i][j]);
void matprint(int mat[][column]){
} /*=======转置矩阵的打印函数=======*/ void mattrasprint(int mat[][column]){
} /*=======main函数=======*/ int main(void){
} printf(“==================================”);printf(“请输入一个 %d x %d 的矩阵:n”,row,column);int mat[row][column];matinput(mat);printf(“==================================”);printf(“原始矩阵为:n”);matprint(mat);printf(“==================================”);printf(“原始矩阵的转置矩阵为n”);mattrasprint(mat);return 0;int arr[column][row];for(int i=0;i
} for(int j=0;j
} printf(“n”);arr[i][j]=mat[j][i];printf(“%3d”,arr[i][j]);for(int i=0;i
} for(int j=0;j
题目七:用户输入的字符串,以相反的顺序打印出来。
要求:利用递归函数调用形式
#include
#define size 20 /*=======相反输出字符串的函数=======*/ void reverse(char a[]){
int i=0;if(a[i]!=''){} int main(void){
}printf(“t提示:输入一串字符以相反的顺序打印n”);char str[size];gets(str);reverse(str);printf(“n”);return 0;
} else return;reverse(&a[i+1]);//递归调用 printf(“%c”,a[i]);
四、讨论
【本文地址:http://www.xuefen.com.cn/zuowen/1577036.html】