数独游戏设计与源码

数独游戏设计与源码
数独游戏设计与源码

数据结构大型作业实验报告书

设计题目:“数独”游戏设计与求解

一.题目说明

数独的游戏规则:

1、在9×9的大九宫格内,已给定若干数字,其他宫位留白,玩

家需要自己按照逻辑推敲出剩下的空格里是什么数字。

2、必须满足的条件:每一行与每一列都有1到9的数字,每个小

九宫格里也有1到9的数字,并且一个数字在每行、每列及每

个小九宫格里只能出现一次,既不能重复也不能少。

3、每个数独游戏都可根据给定的数字为线索,推算解答出来。

按照数独的游戏规则,用计算机实现已知数独的求解和数独题目的出题。

二.数据结构说明

数据结构一维数组、二维数组以及类似于“栈”的数据结构。

主要操作有:进栈,出栈,栈顶元素的操作等等

三.抽象数据类型(Abstract Data Type 简称ADT) 五个全局变量数组,其中两个二维数组,三个一维

数组。

int a[10][10]

接受输入数据,空白处则初始化为0。之所以把数组范围设计为10*10,是为了程序的可读性。符合人的习惯思维。

int sd[82]

在实现“回溯”算法的时候,因为要用到栈的数据结构,所以把a[10][10]二维数组中的数据转换储存进sd[82]一维数组。方便处理题目以及保存最后结果。

int fix[82]

对应于sd[82],记录哪些位臵已经确定。确定则fix值为1,未确定为0。

int possible[82][10]

第一维对应着sd[82]中的每一个,第二维的下标为每个位臵的可能值。有可能则为第二维的下标,不可能则为-1。

int stack[82]

类似于“栈”数据结构的数组,实现“回溯”算法的关键所在。回溯之前,把所有fix 值为0的数据存如stack 数组中,即进栈。回溯中逐渐确定这些位臵的数值,无法确定者(即1--9都不适合的)则应回退到前一位臵,修改其fix 值,以此类推。直至stack 中所有的值都确定下来(即题目完成),或者回退到了最初点的前一位臵(说明题目有误)。

四.算法设计

程序可以考虑人工智能的算法。所谓人工智能的算法,应当是算法设计者对该游戏的特性有较为深入的了解,依据其内在联系设计出的和人类思维相似的解决算法。但这似乎太过复杂,所以这里决定采用“回溯”的方法解决数独问题。

基本框架如下:

五.数独程序代码:

#include"stdio.h" //标准输入输出头文件

#include"conio.h" //包含getch()的头文件

从界面读取数

据到将a[10][10]中数据转存入

sd[82] 预处理,算出所有fix 和possible 值 “回溯法"计算数独

#include"stdlib.h" //包含rand()的头文件

#include"assert.h" //包含assert()的头文件

#include"time.h" //包含srand()的头文件

//五个全局变量数组

int a[10][10];//用来接收输入数据的数组

int sd[82];//处理题目以及保存最终结果

int fix[82];//记录哪些位置是确定的,确定为1,否则为0 int possible[82][10];//记录所有未确定数字的可能性

int stack[82];//用来放置填入的数的栈

void clssd()//初始化函数,所有位置设为0

{

int i,j,k;

for(i=0;i<9;i++)

for(j=0;j<9;j++)

a[i][j]=0;

for(k=1;k<=81;k++)

sd[k]=0;

}

int line(int line,int value)//检验行

{

int i;

for(i=1;i<=9;i++)

{

if(a[line][i]==value) return 0;

}

return 1;

}

int row(int row,int value)//检验列

{

int i;

for(i=1;i<=9;i++)

{

if(a[i][row]==value) return 0;

}

return 1;

}

int square(int line,int row,int value)//检验3*3的九宫{

int L,R,i,j;

L=(line%3!=0)+line/3;//L表示所在九宫的行数

R=(row%3!=0)+row/3;//R表示所在九宫的列数

for(i=(L-1)*3+1;i<=L*3;i++)

{

for(j=(R-1)*3+1;j<=R*3;j++)

if(a[i][j]==value) return 0;

}

return 1;

}

//四个转换函数

int transform_to_line(int i)//实现sd[i]->a[line][row]之间的转换{

int line;

line=i/9+(i%9!=0);

return line;

}

int transform_to_row(int i)//实现sd[i]->a[line][row]之间的转换{

int row;

row=i%9+9*(i%9==0);

return row;

}

void transform_to_a(int i)//sd[i]->a[line][row]的转换

{

int l,r;

l=transform_to_line(i);

r=transform_to_row(i);

a[l][r]=sd[i];

}

void transform_to_sd()//实现a[line][row]->sd[i]的转换

{

int line,row,i=1;

for(line=1;line<=9;line++)

for(row=1;row<=9;row++)

do

{

sd[i]=a[line][row];

i++;

break;

}while(i<=81);

}

//输出函数

void printAll()

{

int i;

for(i=0;i<81;i++)

{

if(i%9==0)

printf("\n\n\t\t");

printf("%4d",sd[i+1]);

}

printf("\n\n\n");

}

void input()//输入数据到a[10][10] {

system("cls");//清屏

int b[3]={0,0,0},i,j;

printf("请输入已知数据");

printf("\n\n例如输入7 8 9,表示第8行第9列的数值为7,以此类推。\n\n\n");

do

{

printf("\n输入数据:按照值/ 行/ 列的顺序,以0结束");

for(i=0;i<3;i++)

{

j=getch()-48;

if(j==0&&i==0) break;//实现按0结束语句

if(j>0&&j<10)

{

b[i]=j;

printf("%3d",b[i]);

}

else i--;

}

a[b[1]][b[2]]=b[0];

}while(j);

transform_to_sd();

printf("\n\n\n\t您输入的题目为:\n\n");//打印输入的数独

printAll();

}

//三个重要函数

bool beExist(int i,int j)//判断sd 数组中位置为i 的元素是否存在

{

int l,r;

l=transform_to_line(i);

r=transform_to_row(i);

//if(sd[i]!=0) return 1; 关键的错误所在!!!

if(line(l,j)*row(r,j)*square(l,r,j)==0) return 1;

else return 0;

}

void setPb()//控制possible数组

{

int i,j;

for(i=1;i<=81;i++)

{

for(j=1;j<=9;j++)

{

if(sd[i]!=0) possible[i][j]=-1; //如果sd[i]为已知输入数据,则将可能值设为-1

else if( beExist(i,j))

{possible[i][j]=-1;}//若在行、列、九宫内,存在相同数值则possible设为-1

else

{possible[i][j]=j;}//其他情况讲可能值保存进possible数组

}

}

}

bool fixAll(int sd[],int fix[],int possible[82][10])//控制fix数组

{

int i,j;

int k[82];

for(i=1;i<=81;i++)//将已经存在的数据对应fix数组中的值设为1,不存在设为0

{

if(sd[i]!=0)

{fix[i]=1;}

else

{fix[i]=0;}

}

for(i=1;i<=81;i++)//判断未确定空格处值的可能性

{

if(sd[i]!=0) continue;

if(fix[i]==0)

{

for(j=1;j<=9;j++)

if(possible[i][j]!=-1)

k[i]++;

}

if(k[i]==1)//如果存在只有一种可能的位置则将fix[i]改为1

fix[i]=1;

sd[i]=possible[i][j];

}

for(i=1;i<=81;i++)//判断是否存在只有一种可能的位置,若没有返回0 {

if(k[i]==1) return 1;

else return 0;

}

}

//判断是否完成

int isFull(int sd[])

{

int i;

for(i=1;i<=81;i++)

if(sd[i]==0) return 0;

return 1;

}

void preDo()//预处理

{

while(1)

{

setPb();

if(!fixAll(sd,fix,possible)) //即不存在只有一种可能性的位置

break;

if(isFull(sd)) //若已经推出全部结果

break;

}

if(isFull(sd))

printAll();//打印结果

}

int calculate()//填数独(关键算法!!!)

{

preDo();//预处理,找出所有的位置的可能数值

if(isFull(sd)) return 1;

int top=0;

//将所有为0的位置入栈

for(int i=1;i<82;i++)

{

if(fix[i]==0)

stack[top++]=i;

}

int max=top;//记录最大数目加1

top=0;//指向栈顶

int temp;

bool flag=true;//该标志位说明了当前是正常入栈

while(1)

{

assert(top>=0);//宏定义,调试程序之用

if(flag)

{

int j;

for(j=1;j<=9;j++)

if(possible[stack[top]][j]!=-1&&!beExist(stack[top],j))

//若top所示的位置上,可以安插j这个数值,则

{

fix[stack[top]]=1;

sd[stack[top]]=j;

transform_to_a(stack[top]);//实现a[line][row]与sd[i]同步变化

++top;

if(top>=max) return 1;

break;

}

if(j>9)//该空所有可能值都不可以,则退一格

{

--top;

if(top<0) {printAll(); return 0;}

flag=false;

}

}

else

{

if(sd[stack[top]]==9)//说明当前这个top也没有可以选择的数,继续回退

{

fix[stack[top]]=0;

sd[stack[top]]=0;

transform_to_a(stack[top]);

--top;

if(top<0) {printAll(); return 0;}

}

else

{

temp=sd[stack[top]];

temp++;

while(possible[stack[top]][temp]==-1||beExist(stack[top],temp))

{

temp++;

if(temp>9)

break;

}

if(temp>9)//当前节点没有更换的可能性,继续退回

{

fix[stack[top]]=0;

sd[stack[top]]=0;

transform_to_a(stack[top]);

--top;

if(top<0) {printAll(); return 0;}

}

else

{

sd[stack[top]]=temp;

transform_to_a(stack[top]);

++top;

flag=true;//重新设定flag

}

}

}

}

}

void solve_problem()//解题

{

int p;

system("cls"); //清屏

clssd(); //赋初值为0

input(); //输入数据

transform_to_sd(); //转换为sd[i]数组

p=calculate(); //计算数独

if(p==0)

printf("\t题目有误!!! ");

printf("\n\n\t答案为:\n");

printAll();

}

void random()//从1-9中随机产生几个值输入sd[1]至sd[9] {

int i,j,r;

int change=1;

int b[10]={0,0,0,0,0,0,0,0,0,0};

for(i=1;i<=9;)//从1-9中随机产生几个值

{

change=1;

j=1+rand()%9;

for(r=1;r<=9;r++)

if(b[r]==j) change=0;

if(change==1)

{b[i]=j; i++;}

}

for(i=1;i<=9;i++)

{

sd[i]=b[i];

transform_to_a(i);

}

}

void hide()//遮罩函数

{

int i,f;

printf("请输入难度:\n\n1.Easy\n\n2.Normal\n\n3.Hard\n\n4.So Hard\n\n5.Terrible Hard\n\n");

do

{

f=getch()-48;

}while(f>5||f<1);//一共5个级别

for(i=1;i<=81;i++)

{

if(rand()%6>=f)//利用随机数出现的概率出题

printf("%4d",sd[i]);

else

printf(" 0");

if(i%9==0)

printf("\n\n");

}

}

void make_problem()//出题函数

{

system("cls");//初始化

clssd();

random();//填9个随机值

calculate();//算出答案

hide();//遮罩,将答案中一些数值遮住

printf("\t\t\t注意:题目中0代表待填数据\n\n\t\t 按空格键输出答案,其他键退出程序\n");

int f;

do

{

f=getch()-32;

if(!f)

printAll();

else break;

}while(f);

}

void main()//主函数

{

srand((unsigned)time(0));//设置时间种子为0

system("cls");//清屏

clssd();

printf("\n\t数独游戏\n\n\t1.你出题,电脑来解\n\n\t2.电脑出题,你来解");

int i;

do

{

i=getch()-48;

switch(i)

{

case 1:solve_problem();break;

case 2:make_problem();break;

}

}while(i>2||i<1);

}

六.调试报告

1.整个程序最麻烦的地方是二维数组a[10][10]与一

维数组sd[82]之间的转换。因为输入数据为了方便和符合人类的思维采用了与数独相似的二维数组进行输入。但是回溯算法要求转换成一维数组进行操作。但是在回溯时每次判断是否一个未知数据是否可能或者是否存在的时候,均需要利用a[10][10]数组进行判断。所以a[10][10]的功能不仅是接受输入数据。更加体现在回溯时的判断过程。所以调试过程中进行了很多两种数组之间转换的操作。为了方便,还专门建立了4个transform 转换函数。

2.设计算法之初,是没有用到fix[82]数组的。后来

在判断回溯与否时方便起见,引入了fix数组。思

路清晰了许多,也提高了算法执行效率。

3.调试过程中,用到了一个宏命令assert(top>=0)

top是栈顶元素的“指针”,用来操控栈中元素。正常情况下top>=0的。如果出现异常情况,则assert 函数会弹出对话框报错。这表示calculate函数在回溯的时候top值总是会回到栈底元素之前。事实上,开始因为在beExist()函数中用了错误的判断方式,运行程序时总是会使得top<0。

4.上面一条提到的,beExist()中用到了错误的判断

语句(//if(sd[i]!=0) return 1;),这就是关键的错误所在。调试程序的时候总是会导致 top<0却一直找不到为什么。开始以为是possible的值没有随着回溯算法的进行跟随sd的变化而变化,于是在每次sd变化之后都加上了一个setPb()函数,使得possible值每填一个数据就变化一次。但是导致的结果却是一旦开始回溯,必定会回溯到栈底之前。运用调试工具观察possible和top值的变化才发现。回溯的时候,之前填的空格处possible 值都为-1,所以top每次都将回到栈底之前。于是以为是setPb()用的太多了,又重新删掉多余

setPb()函数,结果还是一样。又经过几个小时的调试,终于发现是在calculate函数执行时,判断每次判断是否回溯都会运行函数beExist( ),调试时,进入beExist()函数发现,自己之前在写这个函数的时候想当然的把sd[i]!=0当作了判断已

经存在(即beExist为真)的条件。直接导致top 回溯到了栈底。于是屏蔽掉这条//if(sd[i]!=0) return 1之后,程序就基本可以正常运行了。

5.上一条中的错误之所以会出现,是因为在设计程序

之初没有想好,不够完善。于是出现了,自己设计的判断方法与计算数独矛盾的结果。得到的教训是,动手之前应该先考虑清楚完整的架构和应该考虑到的细节。

七.测试结果分析

下面为规定测试数据:

3 4 2 1 7

2 9 1 4 5 7 9 5

7 6 2 3 1 5 4

3 1 8 2 7

2 5 4 1 9 7 3

2 5

3 1 3 7 6 8

5 2 3

6 1

C#面向对象课程设计--拼图游戏

《C#程序设计》课程设计 题目:拼图游戏 专业:计算机科学与技术 学号: 姓名: 指导老师: 完成日期: 2012/12/26

《C#课程设计》评分标准 题目:拼图游戏专业:计算机科学与技术学号:姓名:

目录 1 前言 (4) 2 需求分析 (4) 要求 (4) 任务 (4) 运行环境 (4) 开发工具 (4) 3 概要设计与详细设计 (5) 系统流程图 (5) 结构功能图 (5) 4 编码与实现 (6) 编码分析 (6) 具体代码实现(附源代码) (9) 5 课程设计总结 (18) 参考文献 (19)

1.前言 拼图游戏一款非常经典的小游戏,因为它比较简单有趣,无论老少都比较适合。拼图的设计对每一个C#语言设计者进行语言提高和进阶都是一个很好的锻炼机会。拼图游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个拼图游戏,对于提高C#开发水平和系统的设计能力有极大的帮助。在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断的移动方块,直到方块按照图片的原来的顺序排好。 2 需求分析 要求 (1)用C#语言实现程序设计; (2)利用PictureBox控件来实现图片的移动 (3)超过200步提示重新来 (4)界面友好(良好的人机互交),程序要有注释。 任务 (1)制作流程图 (2)编写代码; (3)程序分析与调试。 运行环境 (1)WINDOWS2000/XP/win7系统 (2)编译环境 开发工具

android课程设计报告(数独游戏)讲解

河南科技学院 《物联网移动应用开发》课程设计报告 设计题目:基于android的数独游戏设计 班级:物联网131 学号:2013156555 姓名:胡建刚 指导教师:许睿 成绩:

信息工程学院 课程设计报告说明 一、写报告前,请认真阅读《课程设计报告说明》。 二、打印装订要求 1、一律用A4纸,双面打印,并左侧装订。报告正文部分均 采用宋体小四。《课程设计报告说明》页也打印。 2、课程设计概述部分占一页;课程设计内容长度根据实际需要填写;结论和指导教师评语及成绩单独占一页。保证打印格式工整。 3、指导教师评语及成绩部分由指导教师填写。 三、报告内容要求 1、课程设计目的结合实际自己写,不要雷同。 2、课程设计原理简要说明所完成课程设计项目所涉及的理论 知识。 3、课程设计内容这是课程设计报告极其重要的内容。概括整个课程设计过程。(最好在上述内容基础上画出相应的流图、 设计思路和设计方法,再配以相应的文字进行说明。)

一、课程设计概述 1、课程设计目的 通过对android的学习,编写除了这个数独游戏,掌握android的控件知识的使用,和界面的制作。对java知识的应用。这样不仅对自身android的学习可以更上一层楼,而且这个游戏可以锻炼智力,游戏简单,适合多人群游戏,健康,益智的 游戏。 2、课程设计要求 1. 熟悉eclipse开发软件,熟练使用java和xml。 2. 学习和掌握android的四大组件的使用。 3. 熟练掌握Android 游戏开发多线程技术、Android 游戏开发的图形处理技术等。 4. 完成程序的编写工作。 5. 完成程序在模拟器上的实现,以及在安卓手机上的功能实现,并完成优化。 3、课程设计原理 基于数独游戏规则,通过java建立一系列的算法。然后利用android的控件知识建立一系列的界面。包括背景的制作。

数字拼图游戏

安徽新华学院计科软件测试方法和技术 课程设计任务书 一、设计题目:数字拼图游戏(出题人:於世芳) 说明:一个拼图游戏。 二、目的与要求 1.目的 培养学生综合利用JAVA语言进行程序设计的能力,主要是培养学生利用JAVA的标准控件进行应用程序设计的技能。 2.基本要求 ?能够实现拼图功能。 ?可以通过初始化任意次的重新游戏。 ?游戏完成后做出相应提示. 3.创新要求 在基本要求达到后,可以参考其他拼图游戏,进行创新设计,创新方向提示如下: ★将数字换成图片。 ★可以记录游戏者成绩并排行 ★增加暂停功能或窗口最小化时暂停计时。 三、设计方法和基本原理 1.问题描述 程序界面见题图。 2.问题的解决方案 ①设计程序界面 因为用的全是基本控件,界面设计没有什么难度,这里涉及到动态添加控件数组,可参见课本控件数组一节内容。 ②编写代码 代码包括事件处理过程和功能函数,还有必要的声明。变量声明部分声明本程序所需要的变量和数组。

事件处理包括下面的主要事件: Form_Load() 作一些初始化的工作。主要是设定初始等级,动态添加控件数组。 Private Static Sub cmdButton_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 游戏运行。 cmd_Click( ) 游戏初始化 其它功能的处理不再一一描述了 四、主要技术问题的描述 虽然界面操作有些复杂,但难点显然并不在于此。下面是初始化设置中的一段程序:package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.Event; import flash.text.TextField; //import mx.controls.Alert; public class Main extends Sprite{ var arr:Array=new Array(1,2,3,4,5,6,7,8); var ditu:Array=new Array(new Array(3),new Array(3),new Array(3)); var pailie:Array=new Array(new Array(0,0),new Array(40,0),new Array(80,0), new Array(0,40),new Array(40,40),new Array(80,40), new Array(0,80),new Array(40,80),new Array(80,80));

四宫数独教学设计

模块六统计 “幼儿四宫数独”教学设计 【学习内容】 幼儿数独 【学习目标】 1.认识四宫“数独”游戏的规则,掌握玩“数独”的方法; 2.通过数学游戏,提高学生推理能力,培养学习数学的兴趣; 3.培养学生养成动手之前先动脑的好习惯,动手实际摆一摆,在拼摆的过程中不断尝试,克服困 难,用数独的思想指导生活。 学习工具:益智学具:幼儿数独 学习形式:每4人为一组,拼摆与讨论。 问题清单: 1.仔细观察横着看,你能发现哪几个数字? 2.竖着看你又能发现哪几个数字? 3.在一个正方形围城的框里,你又能发现哪几个数字? 【活动过程】 1.创设情境,提出问题 教师带来一个既能培养我们的观察能力,又能锻炼我们动手动脑能力,并且它是所有聪明人喜欢玩的一种填数字游戏,孩子想变成聪明人那就一起来玩游戏。 出示:幼儿四宫数独 简介“独”的意思:单一的,独自的,然后理解“数独”之意:单一的数字或独立的数字,“宫”为一种小房子,古代帝王或太子居住的地方,用自己的话说“四宫数独”的意思,加深游戏印象。 简介游戏组成部分: 左面这是游戏盒,类似于我们平时的棋盘,上面有十六个圆形的小孔,右面是十六颗棋子,分别是四个相同的1、2、3、4,从图中,你能猜到我们要玩什么吗? 预设:玩数字,把数字摆放在小圆孔上。 这是我提前摆好的棋子,请看:

动手之前,我们先来看“问题清单”: 1.仔细观察棋盘,横着看你能发现哪几个数字? 2.竖着看你又能发现哪几个数字? 3.在分成的四个正方形内,你又能发现哪几个数字? 【设计意图】学生平时接触的棋类和今天要玩的数字棋大不相同,因此在清单里面要抓住让学生观察的重点四个数字:1、2、3、4,先让学生在意识里引起注意要玩让学生的棋跟四个数字有关,而且要简洁明了的让他知道四个数字分别出现在哪里,显得尤为重要。 2.活动与实验,建立模型 1.弄清横着为行,竖着为列,每四个小格子围城的正方形是一宫。 2、填数字游戏规则:每一行里有1、2、 3、4,每一列里有1、2、3、4,每一宫里也有1、2、3、 4,而且不能够重复,只能出现一次。 同学们已经迫不及待了,想玩填数字游戏吗?那就要按要求去做。 活动要求: (1)在一行中这样摆,那剩余的格子怎么摆。 (2)在一列中这样摆,那剩余的格子应该怎么摆? (3)在一宫中这样摆,那剩余的格子应该怎么摆? 【设计意图】学生第一次接触这种填数字的游戏,增加了难度,孩子不但会填更要动手操作把它摆正确,这就要求学生动手之前先动脑,设计了三个简单的动手操作活动,简单的活动让学生熟悉规则,调动学生继续玩下去的兴趣,让他获得成功的喜悦。为后面更加复杂的摆数字游戏积累初步的活动经验,把复杂的问题简单处理,由易到难的拼摆符合学生的认知规律。 2.汇报展示。 (1)我这样摆。 (2)我这样摆.

扫雷的课程设计报告

西安文理学院信息工程学院课程设计报告 设计名称:数据结构课程设计 设计题目:实现一个N*M的扫雷游戏 学生学号:1402130407 专业班级:软件13级四班 学生姓名:樊秀琳 学生成绩: 指导教师(职称):谢巧玲(讲师) 课题工作时间:2015.6.22 至2015.7.3

说明: 1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个 学生。 2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。 3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律 按不及格处理。答辩由指导教师实施。 4、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设 计的情况另行规定。 5、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按 不及格处理。

信息工程学院课程设计任务书 指导教师:院长: 日期:2015年6月22日

信息工程学院课程设计进度安排表 学生姓名:樊秀琳学号:1402130407 专业:软件工程班级:13级四班 指导教师签名: 2014年6月22日

成绩评定表 学生姓名:樊秀琳学号:1402130407 专业:软件工程班级:13级四班

摘要 摘要: 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C++,VB,JAVA等。我利用eclipse编写了与它功能相似的扫雷游戏,寓学于乐。 程序的功能是随机生成地雷数,通过鼠标操作玩游戏,不接受键盘,按任意键结束程序。单击屏幕上的笑脸可以重新开始游戏。所有地雷标出后胜利,当鼠标左键单击到地雷时提示游戏失败。其功能类似于Windows操作系统自带的扫雷游戏。论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作。清除未靠近地雷区的方块较为复杂。 关键词:算法设计;事件;Eclipse

android课程设计报告(数独游戏)

河南科技学院《物联网移动应用开发》课程设计报告 设计题目:基于android的数独游戏设计 班级:物联网131 学号:2013156555 姓名:胡建刚 指导教师:许睿 成绩:

信息工程学院 课程设计报告说明 一、写报告前,请认真阅读《课程设计报告说明》。 二、打印装订要求 1、一律用A4纸,双面打印,并左侧装订。报告正文部分均采用宋体小四。《课程设计报告说明》页也打印。 2、课程设计概述部分占一页;课程设计内容长度根据实际需要填写;结论和指导教师评语及成绩单独占一页。保证打印格式工整。 3、指导教师评语及成绩部分由指导教师填写。 三、报告内容要求 1、课程设计目的结合实际自己写,不要雷同。 2、课程设计原理简要说明所完成课程设计项目所涉及的理论知识。 3、课程设计内容这是课程设计报告极其重要的内容。概括整个课程设计过程。(最好在上述内容基础上画出相应的流图、设计思路和设计方法,再配以相应的文字进行说明。)

一、课程设计概述 1、课程设计目的 通过对android的学习,编写除了这个数独游戏,掌握android的控件知识的使用,和界面的制作。对java知识的应用。这样不仅对自身android的学习可以更上一层楼,而且这个游戏可以锻炼智力,游戏简单,适合多人群游戏,健康,益智的游戏。 2、课程设计要求 1. 熟悉eclipse开发软件,熟练使用java和xml。 2. 学习和掌握android的四大组件的使用。 3. 熟练掌握Android 游戏开发多线程技术、Android 游戏开发的图形处理技术等。 4. 完成程序的编写工作。 5. 完成程序在模拟器上的实现,以及在安卓手机上的功能实现,并完成优化。3、课程设计原理 基于数独游戏规则,通过java建立一系列的算法。然后利用android的控件知识建立一系列的界面。包括背景的制作。

MFC课程设计之拼图游戏设计报告

拼图游戏 实验报告 一、实验目的

1、通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。 2、通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC变成的基本功能。 3、通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。 二、小组分工 为了发挥组内同学的各自特长,我们小组分工如下: 1、苏嘉彬——前期进行系统需求分析,系统结构设计,完成拼图界面的设计工作, 后期完成课程设计报告 2、嵇鹏飞(组长)——完成主要程序的编写工作(图形分割、存储、拼图) 3、依代吐力·艾尼——搜集资料,完成计时器的设计工作,软件接口的设计及测 试 三、程序设计思路 1、初步方案讨论 拼图游戏是同学们喜欢的益智游戏之一,带着浓厚的兴趣,我们选择拼图游戏设计 作为我们小组本次MFC课程设计的课题。在讨论中,有的同学希望用单文档(SDI) 的形式完成本次设计,有的同学则偏向于用对话框(Dialogue)的形式,最终我们小组 讨论决定最终的设计采用对话框形式实现拼图功能。 2、方案变更、疑难解决 (1)最初我们决定采用对话框形式来实现拼图的基本功能,但是在实施过程中出 现了几次很严重的错误:Debug Assertion Failed,缺少ivewers.dll文件等等,在最后的 尝试中我们发现如果采用单文档(SDI)形式写拼图的话,可以实现最基本的功能,因 此我们最终决定使用单文档来完成该课程设计。 (2)一开始我们讨论决定采用的方式是将位图读入后再进行图片的分割,而在实 际的操作过程中由于图片的分割有一定的困难,因此我们最后采用的方式是将位图进行 分割完毕后再逐个用Brush在指定位置上进行绘画,实现图形的分割。 3、系统需求分析 (1)系统功能 简单的拼图游戏应该有拼图、计时、判断拼图成功、游戏者用时统计排名等功能, 拼图内部还应该有难度选择、相邻拼图块自动拼图等功能。图1所示是拼图游戏的用例 图,表明拼图游戏的主要功能。 图1 (

Matlab解数独游戏解析

Matlab解数独游戏解析 课程设计说明书 学生姓名: 燕飞宇学号: 1405054217 信息与通信工程学院学院: 专业: 信息对抗技术专业题目: Matlab专用周 (随数字信号处理课) 指导教师: 李凯、刘宾、杨志良、李沅 2016年 11月 30 日 中北大学 课程设计任务书 2016/2017 学年第一学期 学院: 信息与通信工程学院 专业: 信息对抗技术学生姓名: 燕飞宇学号:1405054217 学生姓名: 毕广宇学号:1405054235 课程设计题目: Matlab课程设计 起迄日期: 2016年12月5日,2016年12月9日 课程设计地点: 信息对抗技术专业综合实验室 指导教师: 李凯、刘宾、杨志良、李沅学科部主任: 张丕状 下达任务书日期: 2016 年11 月30日 课程设计任务书 1(设计目的: (1)通过本课程设计的学习,学生将复习所学的数字信号处理知识,使课堂学 习的理论 知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力; (2)掌握Matlab语言的编程方法,能熟练运用;

(3)通过Matlab实践的课程设计,掌握设Matlab数字信号处理系统的思维方法和基本 开发过程。 2(设计内容和要求(包括原始数据、技术参数、条件、设计要求等): 一、学习Matlab编程及仿真 1、熟悉Matlab的运行环境; 2、学会并掌握Matlab图形编程; 3、根据所设计系统的需要会合理设定需完成系统的各项参数; 4、根据所设计系统的需要,优化程序设计最优系统。二、实践设计要求: 1、根据所选题目,设计实现系统的原理框图。 2、编写Matlab程序,给出系统不同节点输出波形。 3、每人写出设计报告。 三、参考题目 题目1:语音信号分析 通过计算机录制一段语音信号,分析该语音信号。 1、分析该信号的频谱特性; 2、采用IIR进行降噪; 3、根据FIR进行降噪; 4、对信号进行断句分割。 5、求信号的均值、方差; 6、求信号的自相关系数; 7、求信号的窗(1秒、2秒)能量; 8、求信号的窗(1秒、2秒)自相关分析 9、采用平均幅度差函数(AMDF法)提取求信号的基音周期、谱估计;

JAVA数独(九宫格)游戏软件设计报告(推荐文档)

佛山科学技术学院 《可视化编程技术》课程设计报告数独(九宫格)游戏软件设计 学生姓名:卫泶媚 学号: 2012914201 年级专业:12级教育技术学2班 指导老师:容汝佳 学院:教育科学学院 广东★佛山 提交日期:2014年6月

目录 1. 前言______________________________2 2.概要设计____________________________3 2.1 数独游戏分析_________________________3 2.2 数独游戏界面设计_______________________5 2.3 数独游戏程序功能_______________________5 3. 详细设计___________________________7 3.1类设计___________________________7 3.2 数独算法设计_________________________9 4.程序代码____________________________10 5.参考资料____________________________19 6.心得体会____________________________20

摘要:本程序是个简单的数独游戏界面,在9×9的大九宫格中有9个3×3的小九宫格,游戏根据玩家选择的难易程度提供不同数量的数字。根据已给出的数字,利用逻辑和推理,在其余空格上填入1至9的数字。每个数字在每个小九宫格内每行、每列只能出现一次。虽然玩法简单,但数字排列方式却千变万化,是锻炼逻辑推理能力的好方法。另外,设有“答案”和“玩法说明”窗口为玩家提供参考和帮助。玩家完成所有数字的填写后,可进行提交,游戏系统会根据所填写的结果弹出相应的对话框。 关键字:java游戏软件,数独(九宫格),界面布局 1 前言 经济在发展,科学在发展,人也在发展。在学习JAVA语言后,我决定使用Java语言编写一个简单的数独游戏,来锻炼人们的逻辑推理能力和思维活跃度,同时,也能满足人们日常空余时间的娱乐需要。数独热潮已经在全球蔓延已久,随着数独游戏不断地发展完善,数独也越来越受到家长和孩子的青睐,认为数独不仅仅只是游戏,而是开发智力的一种方法。在孩子游戏娱乐的同时还能得到逻辑思维的锻炼,又何乐而不为呢? JAVA语言是一种纯面向对象的编程语言,自1995年诞生至今,已经得到飞速的发展,涉及计算机应用的方方面面,如浏览器应用、桌面应用、个人数字代理等等,Java语言面向对象、跨平台、安全性、多线程等特性,奠定了其作为网络应用开发首选工具的基础。 另外,本数独游戏程序框架结构清晰明朗,便于读者理解以及为以后增添新功能打下良好的基础;同时,虽然这是一个较为普通的数独游戏程序,但是具有较强的实用性,而且对程序的配置要求不高,能够广泛应用。

Java课程设计——拼图游戏

拼图游戏 1.游戏规则介绍 (1)本游戏中有一个格子是空的,其他格子内随机放置由要拿来拼图切割成的8个小图片。在开始游戏之前,会出现一张完整的图片,点击“菜单”里面的“开始”, 进行拼图游戏,通过将空格旁边的小图片与空格交换位置(不断的移动方块), 来实线拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。在 移动过程中,窗口右边会显示移动的步数。 (2)游戏拼完后,会弹出一个信息框,询问是否再玩一局,点击“Yes”将再打开一个游戏开始的界面,可以继续新的一局游戏,点击“No”将结束游戏,关闭所有窗 口。 2.游戏实现的功能 (1)点击运行程序,将弹出一个窗口,显示一张完整的图片。 (2)菜单栏的菜单,会出现3个菜单项:“开始”、“重新开始”、“结束”。 点击“开始”,即开始一局游戏;“在游戏的任何时候点击”重新开始“,即结束 当前游戏,重新开始一局新的游戏;点击“退出“,立即退出游戏,关闭窗口。 (3)在游戏过程中,游戏界面右边会同步显示当前的步数。 游戏的一些界面: (1)主界面: (2)菜单项:

(3)帮助--->关于 (4)点击开始 (5)游戏过程 (6)游戏成功

(7)破纪录 3.程序实现 Pt类: (1)建立一个类Pt,public class Pt extends JFrame implements KeyListener{}。该类继承父类JFrame,实现KeyListener接口。 (2)Pt类的构造函数Pt()。定义窗口参数,添加菜单栏和多个标签;调用读文件函数read (),读取该游戏的最高记录,并将该记录输出到标签上;为各个菜单添加事件,鼠标点击“开

数独游戏实验报告doc

数独游戏实验报告 篇一:Sudoku 数独实验报告 Project2:Sudoku实验报告 一、算法描述 求解Sudoku让人最容易想到的方法是穷举每个方格可能的值,如果符合条件,则得到解,不符合条件则进行回溯。通过递归的方法,显然可以得到数独的解。 我想到的简单的递归方法,是每一行从左到右,试验每一个方格可能的数字,进行递归。这种方法看似非常麻烦,实际上对于一般的数独题,速度是非常快的,思想比较简单,写出来的代码也非常简单、易懂。 算法1:简单递归方法 从第一个格开始,从1到9试验,是否满足行、列、九宫格互不相同的条件。若满足条件,则填入该数字,再试验下一个格。当一个格子出现没有数字能填的情况时,说明已经填的数字有误,回溯,再进行递归。 算法2:优化的递归算法 先遍历所有格子,统计每种格子可能出现数字的个数。每次挑选可能出现数字个数最少的格子来进行递归。 设置三维数组poss[i][j][k]来存储可能出现数字的信息。poss[i][j][0]记录i行j列的格子可能出现数字的个

数,poss[i][j][k](1 算法3:生成数独棋盘的算法我最开始的想法是穷举法,随机生成满足行各不相同的 9行,再判断9宫格、每列是否符合要求,符合条件时,随机生成停止。然而,这种算法的当然时间复杂度显然是过高。第 99 一步的随机生成的次数是9*9/P9=9608。随机生成一组棋盘耗时就非常大。 后来,我从求解的个数的程序获得启发。算法二对于1000多组解的数独棋盘,解起来也很快。随机生成填9个方格,再用算法一的方法解出来,取第一组正确的解作为棋盘即可生成填好的棋盘。再把一定数量的格子的数字随机删除,计算解的个数。如果解唯一,就得到了棋盘。 二、 数据结构 这两种算法的数据结构不是非常复杂,只是普通的数组。算法一:数组a[i][j] 算法二:数组a[i][j]和poss[i][j][k] 算法三:数组 a[i][j]和poss[i][j][k] 三、 时间效率分析 算法1:这种算法在tsinsen系统上只用了15ms得到全

java课程设计-拼图游戏代码

package love; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; public class Games extends JFrame implements ActionListener { private JButton buttons[][];// 存储按键的数组 private Container container;// 一个容器 private GridLayout layout;// 布局方式为GridLayout private int count = 0, is[] = new int[8];// count的作用是计算按键移动的次数,is[]储存一个随机产生的1到8数字数组 public Games() { super("拼图游戏");// 设置标题 layout = new GridLayout(3, 3);// 3行3列 container = getContentPane();// 该容器的布局方式,及其重要,否则产生空引用异常 container.setLayout(layout);// 将该布局方式作用于容器 buttons = new JButton[3][3];// 给按键数组分配储存空间 int locate1, locate2;// locate1用来指示当前产生的元素 locate2用来指示locate1之前的元素 for (locate1 = 0; locate1 < 8; locate1++) {// 该方法作用是产生1到8这8个数,随机分配给数组,即无序排列 int g = new Random().nextInt(8) + 1;// 随机产生一个空白按键,即不显示的那个 is[locate1] = g; for (locate2 = locate1 - 1; 0 <= locate2; locate2--) { if (is[locate1] == is[locate2]) break; } if (locate2 != -1) locate1--; } int temp = 0; int r = new Random().nextInt(3);// 随机产生一个0到3的数,代表空白按键的行 int l = new Random().nextInt(3);// 随机产生一个0到3的数,代表空白按键的列 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) {

数独游戏课程设计报告

数独游戏课程设计报告 将“数独”智力游戏的难度划分与创建问题分解为建立终盘和初盘、难度评分、游戏创建。首先采用行列变换的方法建立终盘,然后隐去部分数字并检验解唯一性,得到初盘。在已得到初盘的基础上,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建不同等级难度的“数独”游戏。最后通过实验验证了模型的实用性。下面是小编整理的数独游戏课程设计报告,欢迎来参考! “数独”是18世纪瑞士数学家欧拉发明。该游戏是在9×9的单元网格中进行,这些网格被分9行、9列和3×3个九宫格。单元网格中已有若干数字,其余均为空格。玩家需要推理出所有剩余空格的数字,并满足每一行、每一列、每一个小九宫格内的数字均含1-9且不重复。每一道合格的“数独”谜题都有且仅有唯一答案。 目前,“数独”作为一种智力游戏已经风靡世界,国内外许多学者已对数独的求解算法做了深入研究,例如递归法、回溯候选数法、枚举算法等,但在数独的难度划分与创建方面的研究还很少。由于影响“数独”难度的因素有很多,就问题本身而言,难度因素包括最高难度的技巧、各种技巧所用次数、是否有隐藏及隐藏的深度和广度的技巧组合、当前盘面可逻辑推导出的个数等等;就玩家而言,了解的技巧数

量、熟练程度、观察力等也属于难度划分应考虑的因素。因此,单单利用空格数或求解时间对题目难度进行划分是不全面的,其难度指标定义过于主观,讨论也不够细致,无法真正划分难度的级别。 本文首先创建符合要求的“数独”终盘,然后在终盘的基础上生成具有数独特性的初盘,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建不同等级难度的“数独”游戏。 首先运用初等行、列变换,构造一个新的简单明了的终盘生成算法,具体步骤如下: Step1:从行的角度出发,在第一行随机输入1-9的数字。以一个小九宫为单位,将相邻三个数字作为一个集体进行交替,由此获得第二行的数字,再由第二行的数字根据前述方法变换得到第三行的数字。由此我们得到一个前三行,共有三个小九宫的全部数字。 Step2:从列的角度出发,仍然以小九宫为单位,把第一个小九宫的第一列的相邻三个数字为一个集体进行交替,由此获得第四个小九宫的一列数字,第一小九宫的第二、三列也通过这个相同的方法而得到第四个小九宫的其他两列数字。剩余的其他小九宫也根据前述相同的方法可以得到,将已得到的一个终盘,恰当隐去某些格子内的值,使之成为合乎数独规则的空格,由此便生成一个数独谜题,即初

C程序课程设计报告(扫雷游戏)

C程序设计 扫雷游戏 一、设计题目:扫雷游戏 二、设计目的 1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养学生综合运用所学知识独立完成课题的能力。 3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基

本素质。 5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。 三、设计要求 1.汪洋和孔维亮组成设计小组。小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。 2.查阅相关资料,自学具体课题中涉及到的新知识。 3.采用结构化、模块化程序设计方法,功能要完善,界面要美观。 4.按要求写出课程设计报告,并于设计结束后1周内提交。 一概述 1)掌握数组指针的概念及其应用 2)培养团结合作精神 2. 课程设计的要求 要求我们有扎实的C语言知识,以及良好的编程习惯,能够熟练的应用循环,有毅力,还要求我们有较强的合作精神,善于总结。同时还要求我们自学C语言作图部分知识。在必要时还要上网查相关资料。 3.课程设计的主要设计思想 扫雷游戏主要用了一个10行10列的二维数组,刚开始利用random随机布雷。 每一个程序最主要的是算法。扫雷游戏算法的重点是一开始统计好每个格子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围8个格子有雷则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围3个格子,其它边缘的格子显示周围5个的状态),我们在主函数中用两个for语句来判断周围雷数。我们还加了鼠标处理函数。 如果格子上有雷则调用函FailExitGame(),显示“Fail!”,游戏结束。若所有的雷都标出,且所有的格子都处理过,则调用函数ExitGame(),显示“OK,Good!”,游戏结束。游戏结束后,按任意键出去。

VB课程设计报告--拼图游戏

VB课程设计报告 —拼图游戏 知识点:控件数组,公共对话框控件,PictureClip控件,多模块程序设计,图片的应用。 1.题目介绍 “拼图”是一种老少皆宜、容易上手的益智类小游戏,本题目要求编制一个拼图游戏程序。使用方法如下: (1)指定一幅图片,将其分割成m × n 个小图块并且打乱顺序后重新排列,其中有一块没有图块的“空挡”。 (2)使用鼠标单击与空挡相邻的图块使该图块与空挡的位置互换。(3)利用空挡位置移动各图块,最终恢复图片原貌,完成拼图。移动的步数越少则说明游戏者的水平越高。游戏过程中,可以打开参考图帮助找到正确的位置。 2.功能要求 (1)运行程序,在进入游戏之前显示一个背景图片。 (2)选择菜单中的“打开图片”命令,显示打开图片对话框,“打开图片”对话框使用公共对话框控件实现,并且只能指定以*.jpg *.bmp 为扩展名的文件。可以在查看菜单中选着“缩略图”进行预览。(3)选择图片之后,程序弹出“指定行列数”对话框,提示将图片分几行几列。使用微调按钮可以调节行数和列数,限制在3-7之间。(4)指定行列数之后,单击确定返回主窗口,程序自动按照指定的

行列数将图片进分割,然后随机排列。 (5)打乱的图片中一空挡位置,用户单击与空挡相邻的图块可以与其互换位置。点击了空挡或者与其不相邻的,程序不做任何操作。原图只少右下角的图块。 (6)图片复原时,程序显示消息框表示祝贺,同时显示游戏共使用的步数。 (7)游戏过程中,如果用户希望参考原图,可以单击“显示原图”按钮,打开“参考图”窗口。 (8)窗体中的背景颜色可以改变,从菜单中选择“背景颜色”命令,弹出“颜色”飞、公共对话框,用户从中选择一颜色即可。 (9)在游戏过程中或在完成后,均可退出程序或选择“打开图片”菜单命令重新开始一个新图片。 (10)“参考图”窗口应是一个非模态窗口,在关闭主窗口时同时卸载,而不是隐藏,否则该程序不会完全关闭,仍会驻留内存。 3.程序设计 概述:(1)PictureClip 控件来管理打开图片并将其分为指定的行列图块,其Picture、Rows、Cols等属性值应在程序中设定。 (2)使用image控件数组来显示图块,设计时只需在窗体上放置一个image控件并将其的index设为0 ,其他的用load语句加载。 (3)“打开图片”和“颜色”对话框commondialog控件实现。设置其filter属性使之只能打开bmp和jpg类型的图片文件。 (4)将image控件的stretch属性设计为TRUE。

(完整word版)课题设计方案数独

《把“数独”引进小学数学课堂的实践与研究》研究方案 长兴县第二小学叶玲俐 一、课题背景及意义: 数独“Sudoku”最早起源于中国数千年前的洛书,18世纪,瑞士盲人数学家欧拉在九宫格的基础上发明了“拉丁方块”,即今天的“数独”的雏形。七十年代由美国的一家数学逻辑游戏杂志首先发表,当时名为Number Place。后被日本人带回日本,1984年“Sudoku”取名“数独”,含义为“每个数字只能出现一次”。数独由于规则简单,却变化无穷,在推敲之中完全不必用到数学计算,只需运用逻辑推理能力,所以无论老少中青男女,人人都可以玩。而且容易入手、容易入迷,一玩就上瘾。只需九个九宫格及1到9不重复的阿拉伯数字,也超越了文字的障碍。 自从数独出现后,从东方到西方,风靡亿万人。其原因有四:一是它的游戏规则简单,数字排列方式却千变万化,形式变化无穷,背后蕴涵着深厚的内涵;二是数独入门门槛低,不受文化和国别语言限制,只要认识1-9的数字就能做,并且交流方便;三是数独适合人群广泛,老少皆宜;四是数独既能充分体现人的智力水平,又能提高人的逻辑推理能力、空间想象能力,分析问题解决问题等实际能力;培养良好的学习习惯、提高学习效率,培养持之以恒、不断进取的精神,培养集体荣誉感、团队协作精神;对提升心理素质、树立自信心和成就感有积极作用。这些能力在课本学习中很难得到完整、实际地训练。 数独不仅能锻炼逻辑推理能力,也能对学生的心智锻炼起到很好的效果。特别是如何正确面对失败、失败后如何重新来过的挫折训练,这正是我国基础教育中忽略的内容。它能给学生成功的机会,并训练他们缜密思维,因为在游戏中只要犯了一个错误就得从头开始。 数学课程标准指出:不同的人在数学上得到不同的发展;要培养学生合作、自主、探究的精神;学生的学习要充满挑战性和富有个性。如果把“数独”这一益智类游戏引进小学数学课堂,必定可以适合不同的年级、不同的学生;通过数独课让学生们对单调的数学产生兴趣,锻炼学生脑力并通过数独重点培养学生的数感、观察力、逻辑推理力和激发想像力。一定能掀起一股学数独、玩数独的益智风潮。这样的事何乐而不为呢? 因此,把数独引进小学数学课堂,笔者认为把它列为课题研究不失为一种好的举措。 二、同类课题的研究综述: 虽然数独发展到现在,整个体系比较完备,专业的团体、竞赛、书籍也很多。目前,北京等个别地区的一些学校也已经在尝试“快乐数独进学校”,并且深获学生和家长的欢迎,取得了一定的成效。日本、新西兰很多中小学已经开设了数独课程,而最近英国政府出资的“教师”杂志也建议把“数独”引进课堂。但是在我县,目前还没有一所学校尝试把数独这一充满魅力的益智类游戏引进小学数学课堂。因此我校率先尝试把数独引进课堂,一定能让这一充满魅力的古老而又具有现代感的益智类游戏在学生中生根、开花、结果。 三、研究内容及预期目标 1.让全体数学教师了解数独的发展史,并亲力亲为,掌握一定的数独解题技巧并乐在其中。

(完整word版)JAVA课程设计--扫雷游戏

合肥学院 计算机科学与技术系 课程设计报告 2009~2010学年第二学期 课程Java语言与应用 课程设计名称扫雷游戏 学生姓名胡远远 学号0604031005 专业班级07网络工程一班 指导教师许强张贯虹

2010年09月 1.设计内容及要求 1.1 扫雷游戏的基本要求 Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下:(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。 (2)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。 (3) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。 (4)扫雷胜利后,显示游戏胜利。 (5) 用户可以右击空格,可以选择标记为“旗帜”、“问号”或者返回成空格。 1.2 需实现的主要功能 (1)用户点击笑脸实现复位操作。 调用repaint()和validate()函数对界面进行重置以及刷新操作(2)可以显示用户完全扫雷成功所花时间。 文本框TF记录扫雷成功所花的时间 (3)在失败和胜利后跳出失败或胜利的文本框 JoptionPane 该类用来调出对话框并提示胜利 2.需求分析 2.1 扫雷棋盘的布局设计 系统的整体布局为:CardLayout布局, 采用了文本框、按钮、面板、框架…等组件,菜单主要有run按钮笑脸和哭脸,按钮的功能是重新开始新的游戏。

Flash拼图游戏制作课程设计报告

目录 第1章需求分析 (1) 1.1 引言 (1) 1.2 课程设计题目 (1) 1.3 课程设计目的 (1) 1.4 程序运行环境及开发工具 (1) 1.5 课程设计任务及要求 (1) 第2章概要设计 (2) 2.1 设计原理及方法 (2) 第3章详细设计 (3) 3.1 第一步: (3) 3.2 第二步: (3) 3.3 第三步 (4) 3.4 第四步 (5) 3.5 第五步 (5) 3.6 第六步 (6) 3.7 第七步 (7) 3.8 第八步 (8) 3.9 第九步 (8) 3.10 第十步 (9) 3.11 第十一步 (9) 3.12 第十二步 (10) 3.13 第十三步 (10) 3.14 第十四步 (11) 第4章系统调试与运行结果 (13) 4.1 系统调试 (13) 4.2 运行结果 (14) 第5章总结与体会 (15) 参考文献: (15)

第1章需求分析 1.1 引言 FLASH作为一款目前最流行的网络动画制作软件,恐怕不知道的人少之又少。其实FLASH强大的功能不光能让我们轻松制作动画,我们还可以利用它完成一些意想不到的工作。比如说是拼图游戏,在这个领域应用非常广泛!而且可以制作各种丰富有趣的小游戏来,是非常的有趣的! 1.2 课程设计题目 拼图游戏设计 1.3 课程设计目的 本课程的设计的目的是通过实践使同学们经历多媒体应用系统开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。结合具体的案例,理解并初步掌握常用多媒体软件的使用,利用多媒体计算机等设备进行音频与视频数据的获取和处理、图像处理与图像文件格式转换、超文本超媒体在交互式多媒体软件的应用;通过《多媒体课程设计》实验,使学生能够达到提高多媒体技术的实际开发应用能力,了解系统分析、系统设计、系统实施的主要环节和步骤以及软件文档的制作过程。 1.4 程序运行环境及开发工具 硬件:PC机一台 软件:Windows 7,PhotoshopCS4,Flash8 1.5 课程设计任务及要求 设计“拼图游戏”,游戏是Flash制作中很重要的一部分,主要应用的是flash内

扫雷小游戏课程设计

西安科技大学 软件工程课程设计报告 题目:扫雷游戏开发 班级:计科0901班 学号: xxxxxxxxxxxx 姓名: xxxxxxx 电话:xxxxxxxxxxxxx

2012年7月 目录 1 绪论 (3) 1.1 选题目的及意义 (3) 1.2 系统概述 (3) 2 可行性研究报告 (4) 3 需求规格说明书 (5) 4 总体设计说明书 (6) 5详细设计说明书 (7) 6 系统实现 (16) 6.1 开发环境 (16) 6.2 关键技术 (16) 6.3 运行结果 (16) 7测试分析报告 (17) 8心得体会 (19) 参考文献

1.绪论 1.1选题目的及意义 随着现在生活节奏的加快,人们在工作学习之余需要一个轻松娱乐的放松环境。因此我编写此软件的目的,一方面作为初学者来了解java环境下的小程序开发,另一方面使用户能在娱乐休闲的同时拓展思维能力。扫雷是单人计算机游戏。游戏的用户界面由小方格组成的战场构成。当游戏开始时,计算机将固定的地雷数随机的放到战场的方格。此游戏还允许玩家指定战场中的地雷数。 参考Windows 操作系统提供的扫雷游戏,改进扫雷游戏程序,增加以下功能:在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、声音、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则和制作人员两个菜单项。 背景说明: a.软件名称:扫雷 b.用户:所有扫雷游戏爱好者 1.2 系统概述 1.2.1扫雷游戏的基本要求 Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下: (1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。 (2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。 (3) 用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。 (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。 (5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢了”的提示出现。 1.2.2 需实现的主要功能 用户可以自定义级别并且可以任意输入雷数; 具有计时功能,即显示用户完成移动盘子所花费的时间。

相关文档
最新文档