windows大实验报告 (MFC扫雷游戏)

windows大实验报告 (MFC扫雷游戏)
windows大实验报告 (MFC扫雷游戏)

《Windows编程》大作业

题目:基于MFC的扫雷游戏

姓名:*******

学号:**********

班级:**********

专业:软件工程

院系:数学与计算机学院

指导教师:***********

基于MFC的小游戏实现

基本要求:

1、实现一个小游戏

2、实现基本游戏控制功能

3、具有游戏数据保存功能

4、界面布局合理、美观;

1.设计目的及要求

1.1设计目的及问题描述

利用VC++程序编写扫雷游戏,以检测自己一个学期对MFC学习的情况,以及了解自己在MFC学习中的不足,巩固和提高自己对MFC的理解和掌握。掌握C++编程和调试的基本技能,进一步提高自己的动手能力,和运用C++解决实际问题的能力。

本次我做的是一个简单的扫雷的游戏,包括计算雷数、时间和扫雷的规则制定。

1.2设计要求

找出所有的非地雷的地方。如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。

(1)操作说明:

开局:单击“开”字按钮

挖雷:单击鼠标左键

标记/取消标记:单击鼠标右键

胜利:

所有有雷的格子都被标记,其余格子都打开。胜利后,会升起几颗信号弹,所有雷爆炸。

快捷操作:

一个格子被打开后(显示数字),且周围8个格子已有对应数量的标记。此时,鼠标左右键同时单击数字,周围未标记的格子都会打开。

(2)游戏主要功能:

gamebox.cpp (.h) 游戏框架:游戏主要逻辑,动画控制,常量定义

mybitmap.cpp (.h) 位图,按钮

myclock.h 时钟处理

mykey.h 工具包

myqueue.cpp (.h) 数据结构:队列

filereport.cpp (.h) 跟踪打印,用于调试程序

stdafx.h 游戏常量定义

说明文件:

MFC部分:

DlgHelp.cpp (.h) 操作说明对话框

DlgSet.cpp (.h) 设置对话框

DlgInput.cpp (.h) 输入姓名对话框

DlgRank.cpp (.h) 排行榜对话框

mine.cpp (.h) MFC应用程序类

mineDlg.cpp (.h) MFC对话框类

(3)制作要点

1. 游戏界面怎样表示(即w*h个格子)

2. 格子的状态表示:打开,被标记

3. 打开一个空格子,与其相连的空格全部打开

4. 信号弹,爆炸效果的动画处理。

5. 对话框的打开,关闭

6. 对话框控件的数据设置,刷新

2.课程设计步骤

(1)位图初始化

bmStart.Init(hInstance,IDB_BITMAP_START);

bmStart.SetDevice(hdccanvas,hdcmem);

bmStart.InitSizeList(1,PICW,PICH);

bmBack.Init(hInstance,IDB_BITMAP_BACK);

bmBack.SetDevice(hdccanvas,hdcmem);

bmBack.InitSizeList(1,200,200);

bmAni.Init(hInstance,IDB_BITMAP_ANI);

bmAni.SetDevice(hdccanvas,hdcmem);

bmAni.InitSizeList(ANI_PIC_NUM,20,20);

bmBomb.Init(hInstance,IDB_BITMAP_BOMB);

bmBomb.SetDevice(hdccanvas,hdcmem);

bmBomb.InitSizeList(sizeof(bmBomb_w)/sizeof(int),bmBomb_w,bmBomb_h,PIC_HAVE_MASK) (2)定义参数及规格

#define MAP_Y 80

#define TIME_X 260

#define TIME_Y 15

#define TEXT_MINE_X 260

#define TEXT_MINE_Y 45

//初级中级高级

enum GAME_LEVEL{

LEVEL0,

LEVEL1,

LEVEL2,

};

//不同级别的地图边长

enum GAME_LEVEL_SIZE{

LEVEL0_SIZE=9,

LEVEL1_SIZE=14,

LEVEL2_SIZE=20,

};

//不同级别雷的数量

enum MINE_NUM{

MINE_NUM0=10,

MINE_NUM1=30,

MINE_NUM2=55,

};

#define MIN_W 9

#define MIN_H 9

//最大地图20*20个格子

#define MAX_MAP_W 20

#define MAX_MAP_H 20

#define MAX_NUM (MAX_MAP_W*MAX_MAP_H) //格子状态:关闭,打开,标记

enum MINE_STATE{

MINE_CLOSE,

MINE_OPEN,

MINE_LABEL,

MINE_ERROR_OPEN,//有雷的格子,被打开

MINE_ERROR_LABEL,//不是雷的格子,被标记};

//id

enum ITEM_ID{

ITEM_NULL=0,

ITEM_MINE=9,

};

//一个格子

struct MINEBOX

{

int iState;

int iNum;//0,空;1至8,雷的数量;9,雷};

/////////////////////////动画效果

//动画单元

struct MAGIC

{

int x;

int y;

int xoff;

int yoff;

int iframe;//帧

int iShow;

};

//动画阶段

enum magic_scene{

SCENE_WIN0,

SCENE_WIN1,

SCENE_FAIL,

};

//动画单元的最大数量

#define MAGIC_NUM 60

//游戏主逻辑

class GAMEBOX

{

public:

GAMEBOX();

~GAMEBOX();

//显示图片

void Show();

//时钟处理

void Check();

//鼠标移动处理

void MouseMove(int x,int y);

//鼠标单击

int LButtonUp(int x,int y);

//鼠标右键单击

int RButtonUp(int x,int y);

//按键处理

void KeyProc(int iKey);

//初始化字体数组

void InitFont();

public:

////排行榜

void LoadRank();//加载排行榜文件

void WriteRank();//写入排行榜文件

void InitRank();//初始化排行榜数据

//游戏中,刷新时间

void CheckGame();

//左右键同时单击一个格子

void LRButtonDown(int xmouse, int ymouse);

////动画控制

void CheckAni();//刷新动画数据

void BeginAni(int iSceneType);//启动动画

void ShowAni();//显示

////胜负检测

int IsFail();

int IsWin();

void InitMine();//初始化地图数据

void ShowInfo();//显示时间,数量

void ShowGame();//绘制格子

//左键单击一个格子

void OpenItem(int xmouse,int ymouse);

//打开一个格子

void OpenOneBox(int x,int y);

//右键,设置标签

void LabelItem(int xmouse,int ymouse);

////游戏数据

int iState;

//画笔,画刷

HBRUSH hBrush;

HPEN hPen,hPenWhite;

//字体

HFONT hf[10];

//////// 开屏动画

int iAniFrame;

struct MINEBOX gamemap[MAX_NUM];

//地图左上角起始坐标

POINT oriMap;

//当前地图宽度高度

int map_w;

int map_h;

//当前雷数

int iMineNum;

//当前等级

int iLevel;

//当前时间(秒)

int iTime;

//剩余标记的个数

int iMineLabel;

MYQUEUE queue;//队列

//动画部分

int iStartBomb;

int iScene;

struct MAGIC magicobj[MAGIC_NUM];

int iScale;//粒子数量

int iTimeLine;//动画时间轴

//排行榜

int iScore[3];

CString strName[3];

};

#endif

(3)鼠标操作

void CMineDlg::OnRButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default gb.RButtonUp(point.x,point.y);

InvalidateRect(NULL,false);

CDialog::OnRButtonUp(nFlags, point);

}

void CMineDlg::OnRButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

//检测是否左右键同时按下

if(nFlags & MK_LBUTTON)

{

gb.LRButtonDown(point.x,point.y);

}

CDialog::OnRButtonDown(nFlags, point);

}

(4)游戏初始化界面

初始化

void FILEREPORT::Show()

3. 课程设计内容

3.1 概要设计

游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。

当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。

3.1.1 程序总体框架描述

3.1.2程序常用类声明

3.2主要技术

1.图形的设置

2.消息处理函数;

3.视图框架设置;

4.扫雷游戏算法。

5.菜单的设置。

3.3系统设计结果(界面截图、操作流程)

界面截图:

操作流程:

4.设计总结

4.1遇到的问题及如何解决

随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以Visual C++ 6.0作为前台开发工具,Visual C++ 6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。

由于我学习Visual C++ 6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,

在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;

在设计过程中对位图的设置不够了解,总是不能调用位图,通过百度,才知道缺少了一部分代码;

对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;

完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查没有找到语句或定义错误,后来发现是电脑问题,最后也解决了。

4.2体会

在扫雷游戏中有些功能还不够完善。在实现的过程中也是困难重重。希望在以后的工作和学习中不断的充实自己的知识结构,把扫雷游戏的功能进一步完善,使它成为一个更具有实用价值的游戏软件,同时也恳请老师给予批评指正。

软件测试 扫雷游戏

软件测试 实验报告(20 15 -20 16 学年第 2学期) 学号: 学生姓名: 专业班级: 学院: 学生成绩:

1.引言 1.1编写目的 编写该测试报告目的为: (1).查找并总结该模块程序所存在的问题; (2).为更改存在的问题,提供参考。 (3).评估测试测试执行和测试计划是否符合 1.2 程序功能 扫雷游戏中各个功能实现 1.3 测试对象 扫雷软件游戏规则测试 1.4 测试方法 黑盒测试 2.测试计划 2.1、条件: ?方块当前状态:标识问号方块、方块初始状态、方块标识红旗、 标识数字X且周围已标记了X个雷、标识数字X且周围没有标记完X个雷,标识数字X标雷错误 ?鼠标操作:左键、右键、双击 ?方块状态:有雷、无雷 2.2、动作: ?方块白色 ?方块标识问号 ?方块标识数字 ?方块旗子 ?炸弹爆炸,游戏结束

?未标识方块闪速 ?周围所有的非雷显示 2.4、简化公式: 6*3*2 =(1+1+1+1+1+1)*3*2 =1*3*2+1*2*2+1*3*2+1*1*1+1*1*1+1*1*1 =6+4+6+1+1+1 =19

3.测试结果分析 3.1结果分析 在程序代码基本完成后,经过不断的调试和修改,最后测试本次所设计的扫雷游戏能够正常运行,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,总的来说本次设计在功能上已经基本达到要求,在其他细节方面有待以后完善。 3.2 修改建议 1.在游戏中可以假如一些声音的提示,在游戏完成和失败的时候弹出一些小 的Flash动画。 2.完善一下扫雷英雄榜等。 4.测试评估 4.1测试任务评估 本次测试执行准备充足,完成了既定目标。 4.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

Java语言 扫雷游戏完整源代码

import javax.swing.ImageIcon; public class Block { String name; //名字,比如"雷"或数字int aroundMineNumber; //周围雷的数目 ImageIcon mineIcon; //雷的图标 boolean isMine=false; //是否是雷 boolean isMark=false; //是否被标记 boolean isOpen=false; //是否被挖开 public void setName(String name) { https://www.360docs.net/doc/9213732984.html,=name; } public void setAroundMineNumber(int n) { aroundMineNumber=n; } public int getAroundMineNumber() { return aroundMineNumber; } public String getName() { return name; } public boolean isMine() { return isMine; } public void setIsMine(boolean b) { isMine=b; } public void setMineIcon(ImageIcon icon){ mineIcon=icon; } public ImageIcon getMineicon(){ return mineIcon; }

public boolean getIsOpen() { return isOpen; } public void setIsOpen(boolean p) { isOpen=p; } public boolean getIsMark() { return isMark; } public void setIsMark(boolean m) { isMark=m; } } import java.util.*; import javax.swing.*; public class LayMines{ ImageIcon mineIcon; LayMines() { mineIcon=new ImageIcon("mine.gif"); } public void layMinesForBlock(Block block[][],int mineCount){ int row=block.length; int column=block[0].length; LinkedList list=new LinkedList(); for(int i=0;i0){ int size=list.size(); // list返回节点的个数 int randomIndex=(int)(Math.random()*size);

高级编程技术课程实验报告-扫雷游戏

高级编程技术课程实验报告 班级通信一 班 姓名陈远春学号201100120084 课程实验内容 扫雷游戏,是Windows操作系统自带的一款经典游戏。其规则简单,上手容易,不论男女老少皆可娱乐。扫雷的目的就是要把所有非地雷的格子揭开即胜利。踩到地雷格子就算失败。 设计的扫雷游戏应包含以下功能:能够显示主菜单和界面;能够接收鼠标输入功能;能够根据规则翻转相应的格子;能够标记指定格子的功能;游戏胜负判断功能;游戏支持背景音乐功能;游戏提供帮助说明。 设计分工安排 本程序由三人共同完成。 其中我主要负责程序代码编写调试和上台讲解方面的工作。 其余两个主要负责游戏设计部分模块的工作。 一、系统概述 扫雷游戏,是Windows操作系统自带的一款经典游戏。其规则简单,上手容易,不论男女老少皆可娱乐。扫雷的目的就是要把所有非地雷的格子揭开即胜利。踩到地雷格子就算失败。 本设计的扫雷游戏包含以下功能:能够显示主菜单和界面;能够接收鼠标输入功能;能够根据规则翻转相应的格子;能够标记指定格子的功能;游戏胜负判断功能;英雄榜记录更新;游戏支持背景音乐功能;游戏提供帮助说明。 二、需求分析 随着世界经济的长足发展和计算机技术的日益成熟,计算机被应用到人类活动的各个领域,各种应用软件也相继问世,这其中有相当一部分是游戏软件。使用游戏软件自然是为了满足人们对娱乐性的要求,而有些软件大都采用3D设计对系统配置的要求较高。 在众多游戏软件中,也不乏一些小游戏的身影,它们对系统的配置要求较低。能够满足人们对娱乐性的需求,是人们在完成工作娱乐时候的最好选择。在各种操作系统中都附带了一些小的游戏,而这些游戏也成为电脑用户软件中不可或缺的一部分。 扫雷游戏是比较经典的一款小游戏,过去的几年里Windows操作系统历经数次换代,变得越来越庞大、复杂,但这个可爱的小游戏在任何版本的Windows操作系统里去却依然保持着原貌。但几乎每个电脑使用者都接触过它,并且深爱着这款小游戏。

JAVA课程设计扫雷小游戏

Java游戏设计报告 院系计算机科学学院 班级计科11002 姓名张林峰 设计日期2012.12.18—2012.12.29

1·设计内容及要求 1.1·扫雷小游戏的基本要求 扫雷小游戏主要采用Java语言编写,适合windows XP以下的系统,以eclipse 为平台。具体要求如下: <1>扫雷小游戏分为初级、中级和高级三个级别,扫雷排行榜保存着每个级别的最好成绩,即挖出全部的地雷并且用时最少。单机游戏菜单选择“初级”、“中级”和“高级”。 <2>游戏默认的是初级级别,用户可以选择不同级别将出现对应级别的扫雷区域,单击扫雷区域任一方格以便启动计时器。 <3>用户选择某个方格,单击它就行。若所选择的放阁下有雷,这一局就结束了,若所选择方格下无雷,则会显示一个数字,该数字代表方格周围8个方格中共有几颗雷。 <4>如果用户认为某个方格下有雷,单击右键可以在方格上标记一个用户认为是雷的图标(一个小旗子)。 <5>用户可以选择标记为疑问的方格,可以选择游戏菜单下的标记,或者双击右键所选方格显示(?)图标。 <6>扫雷完成后,程序弹出保存成绩的对话框,用户可以根据自身选择是否保存。 <7>如果用户喜欢有提示音,可以选择游戏菜单中的声音选项,单击扫雷区域任一方格,就会听到吧嗒声。当点中地雷时,将会有爆炸声音响起,胜利后,将播放凯旋的旋律。 1.2需求实现的主要功能 (1)该游戏具有计时功能,即扫完全部地雷所花费的时间。 (2)用户可以选择是否有音效。 (3)用户可以自定义级别,还可以输入任意地雷数。 (4)自动保存扫雷排行榜。 2·需求分析 2.1扫雷区域的布局设计 系统的整体布局为:CardLayout布局,采用菜单、按钮、面板……等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。 2.2雷区的设计 MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener 和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。 2.3音效的设计

Java扫雷游戏源代码

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane(); setSize(297,377); this.setBounds(400, 100, 400, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); timer =new Timer(1000,(ActionListener) this); a = new int[row+2][col+2]; initGUI(); } public void initGUI(){ p3=new JPanel();

扫雷

大连科技学院 Java课程设计报告 题目扫雷小游戏 学生姓名 XXX 专业班级软件工程12-1 指导教师史原职称讲师 所在单位大连科技学院 教研室主任刘瑞杰 完成日期 2015年6月12日

目录 1.总体设计 (1) 1.1本系统的主要功能 (1) 1.2系统包含的类及类之间的关系 (1) 2.详细设计 (2) 2.1 MineGame.java(主类): (2) 2.2 MineArea.java: (2) 2.3 Block.java: (3) 2.4 BlockView.java (3) 2.5 LayMines.java: (3) 2.6 Record.java: (4) 2.7 ShowRecord: (4) 3.运行效果 (5) 3.1 系统主界面 (5) 3.2初级录入界面 (5) 3.3中级录入界面 (6) 3.4高级录入界面 (6) 3.5游戏结束录入界面 (7) 3.6游戏英雄榜界面 (7) 参考文献 (8) 附录1 软件源程序 (8) 课程设计实践总结: (25)

1.总体设计 1.1本系统的主要功能 (1)本系统用户可以自定义级别并且可以任意输入雷数; (2)具有计时功能,即显示用户完成移动盘子所花费的时间; (3)自动保存扫雷英雄榜; 1.2系统包含的类及类之间的关系 本系统共包括7个java源文件。 如图1-1所示。 图1-1 类之间的关系

2.详细设计 2.1 MineGame.java(主类): (1)成员变量 bar和fileMenu 提供菜单操作,单击菜单操作中的选项为“初级”,“中级”,“高级”或“扫雷英雄榜”;mineArea 是扫雷区域,提供有关雷的主要功能;英雄榜”负责存放三个级别的扫雷最好成绩;showHeroRecord负责显示英雄榜中的数据(2)方法 MineGame()是构造窗口,负责完成窗口的初始化。 ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。 Main(String[])方法是程序运行的入口方法。 (3)源代码见文件MineGame.java 2.2 MineArea.java: (1)成员变量 block和Block类型的数组,用来确定雷区有多少需进行扫雷的方块; blockView是BlockView类型的数组,负责block数组中Block对象提供视图; lay是LayMines类型的对象,负责设置block数组中的哪些方块不是雷; record负责提供保存成绩的界面,是一个对话框,默认为不可见,用户只有扫雷成功后,才可以看见该对话框; reStart是一个按钮对象,用户单击它重新开始游戏; time是计时器对象,负责计算用户用时。 (2)方法 initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。 actionPerformed(actionEvent)是MineArea类实现的ActionListener接口中的方法。当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。 Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show 方法进行扫雷。 mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方

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!”,游戏结束。游戏结束后,按任意键出去。

C语言扫雷源代码

C语言扫雷源代码.txt如果背叛是一种勇气,那么接受背叛则需要更大的勇气。爱情是块砖, 婚姻是座山。砖不在多,有一块就灵;山不在高,守一生就行。 #include #include #include #include /*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define RIGHTPRESS 0xff02 #define RIGHTCLICK 0xff20 #define RIGHTDRAG 0xff2a #define MIDDLEPRESS 0xff04 #define MIDDLECLICK 0xff40 #define MIDDLEDRAG 0xff4c #define MOUSEMOVE 0xff08 struct { int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/ int roundnum;/*统计格子周围有多少雷*/ int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/ }Mine[10][10]; int gameAGAIN=0;/*是否重来的变量*/ int gamePLAY=0;/*是否是第一次玩游戏的标志*/ int mineNUM;/*统计处理过的格子数*/ char randmineNUM[3];/*显示数字的字符串*/ int Keystate; int MouseExist; int MouseButton; int MouseX; int MouseY; int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16]; void MouseMath()/*计算鼠标的样子*/ {int i,j,jj,k; long UpNum[16]={ 0x3fff,0x1fff,0x0fff,0x07ff, 0x03ff,0x01ff,0x00ff,0x007f, 0x003f,0x00ff,0x01ff,0x10ff,

java_扫雷_课程设计_报告

《JAVA程序设计》 课程设计报告 系别:计算机与电子系 专业班级:计算机科学与技术0803班 学生姓名:曾一墙 指导教师:徐鹏 (课程设计时间:2011年6月13日——2011年6月24日) 华中科技大学武昌分校

课程设计报告撰写内容、格式与成绩评定 一、课程设计报告的撰写内容与要求 1.课程设计总结报告应包括:前言、基本原理或理论、设计计算书或实验报告、结论、图纸(框图、流程图)、参考资料等;或调查、访谈报告、调查问卷、调查提纲等。 2.课程设计总结报告应书写工整,文句通顺、精炼、逻辑性强,图纸和曲线的绘制应符合规范。 3.调查型课程设计应根据调查结果撰写调查报告。调查报告内容包括:题目、参加时间、地点、方式、过程、调查对象一般情况、调查内容、发现的问题、调查结果和调查分析及体会等。调查报告要求语言简练、准确;叙述清楚、明白;数据、资料可靠;结论有理、有据。 4.图纸应布局合理,比例恰当,线条分明,字体工整,符合国家制图标准。 5.课程设计报告字数要求:理工、艺术类不少于2000字,其他专业不少于3000字。 二、课程设计成绩评定 1.学生的课程设计成绩由平时成绩、业务考核成绩两部分组成,均为百分制记分,其中平时成绩占总成绩的30%,业务考核成绩占70%。业务考核含设计报告(计算说明书、调查提纲、调查问卷等)、绘制的图纸、编制的软件、制作的模型、撰写的论文或问卷统计、调查分析等的完成及质量情况;平时成绩含设计表现、到课率等。 2. 教师按学生实际成绩(百分制,含平时成绩和业务考核成绩两部分)登记并录入教务MIS系统,由系统自动转化为“优秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分)和不及格(60分以下)”五等。

能力拓展训练-----扫雷游戏

课程设计 题目扫雷游戏 学院计算机学院 专业软件工程 班级0803班 姓名徐泽前 指导教师 2010 年7 月15 日

扫雷游戏 1规则描述 游戏开始后,系统会在雷区的小方块中随机布下若干个地雷。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中雷方块的数量,玩家可以根据这些信息去半段时候可以打开某些方块,并把认为是地雷的方块打上标记,当玩家吧所有地雷找出来后,其余非雷方块区域都已打开,这时游戏结束。在游戏过程中一旦错误的打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数量超过程序设定,虽然打开了全部其余方块,游戏仍不会结束。 2软件环境 Windows XP Microsoft Visual C++ 3功能需求分析 游戏需要提供两个计数器,一个用来显示用户扫雷所花费的时间,以秒为单位;一个用来显示当前还剩多少个雷方块。另外提供一个按钮,用来开始游戏。在游戏区域方面,按功能将它分成两大区域:雷区和提示区。提示区除了上面提供的计数器外,还包括两个按钮,一个用来开始游戏,一个用来显示版本信息。游戏过程中,当玩家用鼠标点击相应的方块,程序就会做出相应的鼠标响应时间,程序处理这些鼠标时间的过程中会伴随着GDI绘图,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。

4程序实现 4.1界面设计 图1 界面设计图 4.2具体实现 4.21布雷 随机获取一个状态为非雷的点,将它的属性标识为雷,重复这样的工作,直到布下足够的累为止,流程图如下 在CMineWind类中添加游戏的布雷模块的处理函数,该函数的具体实现如下所示:

游戏开发课程设计报告模版-扫雷游戏报告(定稿)

中原工学院信息商务学院 课程设计报告 2016~2017学年第一学期 课程游戏开发课程设计 课程设计名称扫雷游戏 学生姓名*** 学号***** 专业班级数媒141 指导教师郑全录 2016年12月

目录 第一章设计内容及要求 (1) 1.1 扫雷游戏的基本要求 (1) 1.2 游戏需要实现的主要功能 (1) 第二章需求分析 (2) 2.1扫雷游戏界面设计 (2) 2.2 雷区的设计 (2) 2.3 音效的设计 (3) 2.4 扫雷英雄榜的设计 (3) 第三章总体设计 (5) 3.1 总体功能图 (5) 3.2 总体流程图 (5) 第四章主要功能设计流程 (6) 4.1 雷区设计流程图 (6) 4.2 音效设计流程图 (6) 4.3 英雄榜设计流程图 (7) 第五章主要功能设计流程 (8) 5.1 类之间关系图 (8) 5.2程序运行效果图 (8) 5.2.1 游戏登录界面 (8) 5.2.2游戏菜单界面 (9) 5.2.3游戏运行界面 (10) 5.2.4游戏英雄榜界面 (12) 第六章总结 (13) 参考文献 (14) 附录 (15)

第一章设计内容及要求 1.1扫雷游戏的基本要求 当前各种游戏层出不穷,因为游戏的开发成本非常大,所以游戏的开发具有一定的风险性,但是一些小游戏的开发成本具有成本小,编写简单的优势,所以这些小游戏在游戏开发中也占有一席之地。在这类小游戏中包括益智类游戏,它以画面精美、游戏方法简单等特点得到大家的认可。成为人们在工作之余不可或缺的好伙伴。针对这种情况我选择了扫雷游戏该课题作为我的课程题目。 Windows XP和Windows 7系统提供的扫雷游戏是一个很有趣的游戏。本次课程设计的主要任务是使用JA V A语言编写一个与其类似的扫雷游戏。具体要求如下: 1、扫雷游戏分为初级、中级和高级三个级别,同时扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。 2、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中任何一个方块便启动了计时器。 3、用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下没有雷,则显示一个数字,该数字代表此方块周围的8个方块中共有多少颗雷。 4、如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),窗口左上角的雷数计数器将会减少一个。 5、扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。 6、用户如果遇到疑问的方块,可以勾选游戏菜单下的标记选项卡(或者用快捷键Alt+G然后点击M)即可标记该可疑方块,此时双击右键并可出现“?”标记。另有颜色选项,当用户选中该项时,游戏将以最低图像像素来显示。 7、如果用户需要使用提示声,可选中声音选项,此时将听到计时的咔嗒声。当用户点中雷时,将有爆炸声产生;胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。 1.2游戏需要实现的主要功能 1、用户可以自定义级别并且可以任意输入雷数; 2、具有计时功能,既显示用户完成所有扫雷任务所需要的时间; 3、自动保存扫雷英雄榜。

扫雷游戏Java源代码详解

扫雷游戏Java源代码 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane();

扫雷小游戏课程设计

西安科技大学 软件工程课程设计报告 题目:扫雷游戏开发 班级:计科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 需实现的主要功能 用户可以自定义级别并且可以任意输入雷数; 具有计时功能,即显示用户完成移动盘子所花费的时间。

扫雷游戏的设计与开发1

扫雷游戏的设计与开发 摘要 本论文研究的是以Visual Basic 6.0为开发环境,设计并开发一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。 本次设计只是完成了扫雷游戏的基本功能,在细节方面仍有待以后完善。 关键词:扫雷;Visual Basic 6.0;事件;递归

The Design and Development of Mine Game Abstract What my thesis research for is basic on the develop environment of Visual Basic 6.0 , design and develop a mine game,its function is similar to the mine games of the Windows Operating System .The thesis has introduced the layout of mined areas and the method of how to create the mines at random. It use vairies of components in Visual Basic 6.0 and the combination of some simple calculations; the thesis lays emphasis on introducing the processing of each event in the game. Among these events ,the mouse event and the event of clearance of the area which isn’t close to the mine field are much more important.The theory of mouse event is that the intention of user is learned by the information sent out by the mouse and then the program runs according to the information .The other event is simplified by the introduction of the concept of recursion. This design has been completed the basic function of mine game. The details still need to be improved. Key words: Mine game, Visual Basic 6.0, Affairs, Recursion

扫雷游戏技巧

1.边角的1对应的角肯定是雷,如下图。这也是扫雷中最常见的情形。 2. 2 2.边上的两个2并排对应的两个块肯定是雷,如下图。 3. 3 3.边角的3对应的3个块肯定是雷,如下图。 4. 4 4.孤立的3对应的3个块肯定是雷,如下图。

5. 5 5.孤立的4对应的4个块肯定是雷,如下图。 6. 6 6.孤立的5对应的5个肯定是雷,如下图。 7.7

7.两个1夹一个2的1,两个1下面对应的块肯定是雷,如下图。 8.孤立的2对应的两个块肯定是雷,如下图。 9.如下图,已知3的左边两个是雷,那么3的下边两个中肯定有一个是雷,所以第二个1下边的那个块肯定不是雷。 10.如下图,已知2的左边一个是雷,所以2的下边两个中肯定有一个是雷,所以1的右边3个块都不是雷。 11.如下图,上边那个1对应的两个角块中有一个是雷,所以下边那个1下边的3个块都不是雷。

12.如下图,两个并排的3对应的3个块都是雷。 13.如下图,两个并排的2,已知左边那个2的左边是雷,则右边那个2的右下角那个肯定也是雷。 14.如下图,已知右边两个竖着的1的左边两个块中有个个是雷,则左边那两个1下方的两个块都不是雷。 15.如下图,1和2孤立地排在一起,则2要从下方3个块中选两个,肯定不会是左边两个,所以2的右下角那个肯定是雷,而1和2下边两个块中有1个是雷,所以1左下角那个肯定不会是雷。

16.如下图,一个3和一个2并排在一起,已知3上边那个是雷,则3左下角那个块肯定是雷,而2右下角那个块肯定不是雷。 17.如下图,两个2并排在一起,且已知右边那个2正上方那个块是雷,则它的左边两个中肯定只有一个是雷,并且左边那个2的左边3个块都不是雷。 一夹二,一有雷; 二夹一,心有雷; 二夹三,全有雷; 二二边,都有雷; 三连一,中有雷; 四连一,边有雷。

java扫雷游戏课程设计报告

Java课程设计报告 姓名 号学 系院 级班 业专 1.设计内容及要求 1.1 扫雷游戏的基本要求 Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下: (1) 扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。 (2) 选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。 (3) 用户要揭开某个方块,可单击它。若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。. (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为

是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。 (5) 扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。 (6)用户可以选择标记疑问的方块,用可以勾选游戏菜单下的标记(或者用快捷键alt+G 然后M)即可,此时双击右键并可出现“?”标记。另有颜色选项,当用户勾选此项时,游戏将以最低图像像素来显示。 (7)如果用户需要即使提示声,并可选中声音选项,此时将听到计时的卡塔声。当用户点中雷时,将有爆炸声产生,胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。 1.2 需实现的主要功能 (1)用户可以自定义级别并且可以任意输入雷数; (2)具有计时功能,即显示用户完成移动盘子所花费的时间; (3)用户可以选择是否有音效; (4)自动保存扫雷英雄榜; 2.需求分析 2.1 扫雷棋盘的布局设计 系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板…等组件,菜单主要包括开始,选择级别,标记,扫雷英雄榜,退出,按钮的功能是重新开始新的游戏。 2.2 雷区的设计 MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener 和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。标明MineArea类的主要成 图2-1 MineArea类的UML图

扫雷游戏报告

《扫雷游戏》程序设计报告 院系中兴电信学院 专业计算机科学与技术 班级7B1431 小组成员强建敏张伟田志杰赵立

一、开发环境 Intel?Pentium?2及以上的处理器,32M以上内存,20M以上硬盘空间。 Microsoft?WindowsTM22000或XP以上操作系统。 800×600或以上的屏幕分辨率 microsoft visual studio 2010 二、系统功能 游戏共由两个类组成 主界面对话框类:主要负责主界面、菜单及各个窗口类对象的创建和调用等处理。 扫雷窗口类:主要负责接收玩家鼠标输入的打开格子位置、格子变换、花费时间及地雷格子的显示等处理。 三、系统设计 1、扫雷格子模块功能设计 地雷格子的处理是扫雷游戏的核心内容,包括如下几个部分。 (1)地雷铺设模块。 游戏中的地雷个数可以根据玩家设定。地雷分布是调用随机数发生函数生成随机数。利用随机数去除最大行数或者最大列数,得到放置地雷行列坐标。然后分别防止地雷到不同的行和列的格子中去。 (2)自动打开周围不是地雷的格子。 在游戏中,当玩家单击的格子周围没有地雷格子时,就需要程序自动地把周围的格子自动打开来提高玩家的效率。 以上的实现,由如下代码实现。 public void LoadGame() {

int x = Convert.ToInt16(cbX.Text);//行坐标 int y = Convert.ToInt16(cbY.Text);//纵坐标 intmine_count = Convert.ToInt16(cbMinecount.Text);//地雷个数 mines = new List(); mines = CreateMines(x, y, mine_count);//生成随机地雷集合 intbtnx = plMines.Location.X + 5; intbtny = 5; for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { Button btn = CreateButton(btnx, btny); btn.Tag = j + "," + i; plMines.Controls.Add(btn); btnx += 40; } btnx = plMines.Location.X + 5; btny += 40; Application.DoEvents(); } } 2、玩家输入模块功能设计 在扫雷游戏中,用的最多的就是鼠标的输入。而鼠标输入又分为鼠标左键单击和右键单击两种处理类型。 1. 鼠标左键的处理

相关文档
最新文档