自己用qt动手写的小游戏,大家可以参考帮忙改进下,谢谢!!
游戏内容图片下坠,点击即可得分,未点击到则坠落到底则丢失,得分超过20则赢,丢失超过10则输
文件声音和图片为方便均采用绝对路径;
首先需要创建一个ui文件
文件名为hei.ui
里面拉2个label,一个为分数,一个为丢失数,objectname任意取
在拉2个lineedit,对应上面分别取objectivename为pointEdit和missEdit
在拉2个按钮开始游戏和退出游戏objectivename为startGame和quitGame
再依次创建下面文件,并使用下面代码:
Hei.pro文件
SOURCES += \
main.cpp \
hei.cpp \
zujian.cpp \
gameArea.cpp
FORMS += \
hei.ui
HEADERS += \
hei.h \
zujian.h \
gameArea.h
RESOURCES += \
image/ico.qrc
RC_FILE=image/app.rc //定义运行图标不需要的话可以删掉
main.cpp 运行主文件
#include
#include"hei.h"
#include
int main(int argc,char*argv[])
{
QApplication app(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());//使中文有效
heiw w;
w.show();
return app.exec();
}
gameArea.h 设置游戏区域背景类就是一个400*550的矩形框子,使用painter画笔画的,如果想丰富一点,可将该类换成QLabel继承类,然后贴图作为背景,还可以自动更换图片背景。
#ifndef GAMEAREA_H
#define GAMEAREA_H
#include
#include
#include
#include
class gamearea:public QWidget
{
Q_OBJECT
public:
gamearea(QWidget*parent=0);
void paintEvent(QPaintEvent*event);
QPainter*painter;
};
#endif//GAMEAREA_H
gameArea.cpp资源文件
#include"gameArea.h"
gamearea::gamearea(QWidget*parent):QWidget(parent) {
update();
}
void gamearea::paintEvent(QPaintEvent*)//重绘函数{
painter=new QPainter(this);
painter->setBrush(Qt::yellow);
painter->setPen(Qt::black);
painter->drawRect(0,0,400,550);
}
Zujian.h 游戏里移动图片类的定义
#ifndef ZUJIAN_H
#define ZUJIAN_H
#include
#include
#include
#include
#include
#include
#include
class zu:public QLabel
{
Q_OBJECT
public:
zu(QWidget*parent=0);
void rand();
void speedrand();
void setX(int a);
void ctlgame();
void mousePressEvent(QMouseEvent*event);
signals:
void point(const int a);
void miss(const int a);
void click();
public slots:
void clkevent();
void Timeout1();
private:
QSound*clicks,*misss;
int a;
QPixmap pix;
QTimer*timer1;
int psel;
int speed;
int X,Y;
bool ctrl;
QString str;
};
#endif//ZUJIAN_H
Zujian.cpp资源文件
#include"zujian.h"
zu::zu(QWidget*parent):QLabel(parent)
{
QTime t1;
t1=QTime::currentTime();
qsrand(t1.msec()+t1.second()*800);//设置随机种子
psel=qrand()%4;//随机取数,用于随机取图片
speed=qrand()%100;//用于图片下坠速度
X=0;
Y=0;
a=0;
ctrl=true;
timer1=new QTimer(this);
clicks=new
QSound("C:\\Qt\\2010.05\\project\\hei\\sound\\click.wav");//点击图片声音
misss=new
QSound("C:\\Qt\\2010.05\\project\\hei\\sound\\miss.wav");//图片未被点击丢失的声音
rand();
speedrand();
connect(this,SIGNAL(click()),this,SLOT(clkevent()));
}
void zu::mousePressEvent(QMouseEvent*event)
{
clicks->play();
emit click();
}
void zu::clkevent()//图片被点击事件
{
Y=0;
rand();
speedrand();
pix.load(str);
setPixmap(pix);
setGeometry(X,Y,100,120);
a=1;
emit point(a);
}
void zu::Timeout1()//图片下坠
{
if(Y>550)//图片下坠超过边界时则重新设置纵坐标为零,并发射丢失信号{
Y=0;
Y+=5;
rand();
speedrand();
pix.load(str);
setPixmap(pix);
setGeometry(X,Y,100,120);
misss->play();
a=1;
emit miss(a);
}
Else//图标下坠
{
pix.load(str);
setPixmap(pix);
setGeometry(X,Y,100,120);
Y+=5;
}
}
void zu::rand()//当图片被点击或者丢失后,随机再取图
{
QTime t1;
t1=QTime::currentTime();
qsrand(t1.msec()+t1.second()*800);
psel=qrand()%4;
switch(psel)
{
case1:str="C:\\Qt\\2010.05\\project\\hei\\image\\1.png";break;
case2:str="C:\\Qt\\2010.05\\project\\hei\\image\\2.png";break;
case3:str="C:\\Qt\\2010.05\\project\\hei\\image\\3.png";break;
case4:str="C:\\Qt\\2010.05\\project\\hei\\image\\4.png";break;
default:;;
}
}
void zu::speedrand()//下坠速度设定
{
speed=qrand()%100;
timer1->start(speed);
disconnect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
connect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
}
void zu::setX(int a)//设置图片横坐标
{
switch(a)
{
case0:X=0;break;
case1:X=100;break;
case2:X=200;break;
case3:X=300;break;
default:;;
}
}
void zu::ctlgame()//暂停继续游戏控制,在heiw文件中使用
{
if(ctrl)
{
connect(this,SIGNAL(click()),this,SLOT(clkevent()));
connect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
ctrl=false;
}
else
{
disconnect(this,SIGNAL(click()),this,SLOT(clkevent()));
disconnect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
ctrl=true;
}
}
Hei.h游戏里主界面的定义
#ifndef HEI_H
#define HEI_H
#include
#include
#include
#include
#include
#include"zujian.h"
class QLabel;
namespace Ui
{
class heid;
}
class heiw:public QDialog {
Q_OBJECT
public:
heiw(QWidget*parent=0);
~heiw();
gamearea*game;
zu*pp[4];
void result();
private slots:
void startgame();
void info(int a);
void infomiss(int a); private:
QSound*sound;
QFont font;
QPalette palette;
QString str,str1;
int miss;
bool starts;
bool Gnew;
int point;
Ui::heid*ui;
QLabel*label;
};
#endif//HEI_H
Hei.cpp资源文件
#include"hei.h"
#include"ui_hei.h"
#include
heiw::heiw(QWidget*parent):QDialog(parent),ui(new Ui::heid)
{
ui->setupUi(this);
this->setFixedSize(630,551);//设定窗口固定大小
this->setWindowTitle(tr("o0O点你妹O0o"));//设置标题
game=new gamearea(this);//创建游戏背景对象
game->setGeometry(0,0,405,550);//设置游戏背景大小
this->game->setFocus();
starts=false;
Gnew=true;
point=0;
miss=0;
label=new QLabel(this);
font.setPixelSize(16);
palette.setColor(QPalette::WindowText,Qt::red);
label->setPalette(palette);
label->setFont(font);
label->setText(tr("森哥出品谢谢试玩\r\n请点击开始游戏"));
label->setGeometry(140,220,140,40);
ui->pointEdit->setText(tr("0"));
ui->missEdit->setText(tr("0"));
sound=new
QSound("C:\\Qt\\2010.05\\project\\hei\\sound\\butterfly.wav");//开始音乐,为绝对路径,需更改
sound->play();
connect(ui->quitGame,SIGNAL(clicked()),qApp,SLOT(quit()));
connect(ui->startGame,SIGNAL(clicked()),this,SLOT(startgame())); }
heiw::~heiw()
{
delete ui;
delete game;
for(int i=0;i<4;i++)
{
delete pp[i];
}
delete label;
}
void heiw::startgame()
{
starts=!starts;
if(starts)//游戏开始和继续
{
if(Gnew)//初次进入游戏时创建4个图片对象
{
for(int i=0;i<4;i++)
{
pp[i]=new zu(this);
pp[i]->setX(i);
pp[i]->show();
connect(pp[i],SIGNAL(point(int)),this,SLOT(info(int)));
connect(pp[i],SIGNAL(miss(int)),this,SLOT(infomiss(int)));
}
Gnew=false;
}
for(int i=0;i<4;i++)
{
pp[i]->ctlgame();
pp[i]->show();
}
ui->startGame->setText(tr("暂停游戏"));
label->setHidden(true);
}
Else//游戏暂停
{
ui->startGame->setText(tr("继续游戏"));
label->setText(tr("游戏暂停中......"));
label->show();
for(int i=0;i<4;i++)
{
pp[i]->ctlgame();;
pp[i]->setHidden(true);
}
}
}
void heiw::info(int a)//接收图片对象点击信号加分
{
point+=a;
str=QString("%1").arg(point);
ui->pointEdit->setText(str);
if(point>=20)
result();
}
void heiw::infomiss(int a)//接收图片对象丢失信号
{
miss+=a;
str1=QString("%1").arg(miss);
ui->missEdit->setText(str1);
if(miss>=10)
result();
}
void heiw::result()//游戏试玩结果超过20分为赢,丢失10个为输,并设置重新开始按钮
{
if(point>=20)
label->setText(tr("好吧!你赢了"));
else
label->setText(tr("你输了!!哈哈"));
label->show();
for(int i=0;i<4;i++)
{
disconnect(pp[i],SIGNAL(point(int)),this,SLOT(info(int)));
disconnect(pp[i],SIGNAL(miss(int)),this,SLOT(infomiss(int)));
delete pp[i];
}
ui->startGame->setText(tr("重新开始"));
sound->play();
point=0;
miss=0;
ui->pointEdit->setText(tr("0"));
ui->missEdit->setText(tr("0"));
starts=false;
Gnew=true;
}
游戏运行结果如下:
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!”,游戏结束。游戏结束后,按任意键出去。
课程设计 题目扫雷游戏 学院计算机学院 专业软件工程 班级0803班 姓名徐泽前 指导教师 2010 年7 月15 日
扫雷游戏 1规则描述 游戏开始后,系统会在雷区的小方块中随机布下若干个地雷。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中雷方块的数量,玩家可以根据这些信息去半段时候可以打开某些方块,并把认为是地雷的方块打上标记,当玩家吧所有地雷找出来后,其余非雷方块区域都已打开,这时游戏结束。在游戏过程中一旦错误的打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数量超过程序设定,虽然打开了全部其余方块,游戏仍不会结束。 2软件环境 Windows XP Microsoft Visual C++ 3功能需求分析 游戏需要提供两个计数器,一个用来显示用户扫雷所花费的时间,以秒为单位;一个用来显示当前还剩多少个雷方块。另外提供一个按钮,用来开始游戏。在游戏区域方面,按功能将它分成两大区域:雷区和提示区。提示区除了上面提供的计数器外,还包括两个按钮,一个用来开始游戏,一个用来显示版本信息。游戏过程中,当玩家用鼠标点击相应的方块,程序就会做出相应的鼠标响应时间,程序处理这些鼠标时间的过程中会伴随着GDI绘图,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。
4程序实现 4.1界面设计 图1 界面设计图 4.2具体实现 4.21布雷 随机获取一个状态为非雷的点,将它的属性标识为雷,重复这样的工作,直到布下足够的累为止,流程图如下 在CMineWind类中添加游戏的布雷模块的处理函数,该函数的具体实现如下所示:
西安科技大学 软件工程课程设计报告 题目:扫雷游戏开发 班级:计科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 需实现的主要功能 用户可以自定义级别并且可以任意输入雷数; 具有计时功能,即显示用户完成移动盘子所花费的时间。
扫雷游戏VB设计实现最终界面如下:
显然只需完成三个窗体的设计即可,具体设计界面和代码如下: 一、主窗体(form10)设计界面:
主窗体(form10)的代码: Dim d(11, 11) As Integer Dim k As Integer Dim v(100) As Integer '定义全局变量' Private Sub Command1_Click(Index As Integer) Timer1.Enabled = True '当点击任意一个命令按钮时(即开始游戏),则启动计时器' i = Index \ 10 + 1 j = Index Mod 10 + 1 '将二维数组的元素与命令按钮一一对应' If d(i, j) = 1 Then '判断是否点到地雷' Timer1.Enabled = False '关闭计时器,游戏结束' For i = 1 To 10 For j = 1 To 10 n = 10 * (i - 1) m = j - 1 If d(i, j) = 1 Then
Command1.Item(m + n).Picture = LoadPicture(App.Path & "\2.jpg") '在按钮上显示地雷图片' End If Form1.Show '弹出子窗体1(判断输赢)' Next j Next i Else If v(Index) = Index + 1 Then '判断是否插上红旗或是问号图片' Command1.Item(Index).Picture = LoadPicture() '清除图片' Command1.Item(Index).Caption = f(i, j) '调用函数,显示周围地雷数' Command1.Item(Index).Enabled = False '将按钮设为不可用' Label7.Caption = Val(Label7.Caption) + 1 v(Index) = 0 End If h = s(i, j) '调用函数,显示周围的情况(边界)' For Y = 0 To 99 If v(Y) = Y + 1 Then Command1.Item(Y).Enabled = True '如果是按钮插上了红旗则将按钮设置为可用' End If Next Y End If
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();
程序输出报告 程序设计时使用环境----Win10 VS2015 1程序设计思路 模块化设计一个扫雷游戏。 要实现埋雷,计算一个格子周围雷数,打开雷位,显示雷区几个功能. 需要以下几个主要数据,判断雷位的雷是否存在,雷位周围的雷数,是否已经被打开,游戏是否结束,雷区大小,布雷量(本程序中非必须保存于类中数据) 2功能的具体实现 为了方便计算和理解先分出类 class OneMine { OneMine(); //雷位构造函数 void InitOneMine(); //初始化一个雷位 bool IsMine; //是否是雷 bool Opened; //是否已经打开 short AroundMines; //周边的雷数 friendclass Operation; friendclass Mines; }; class Mines//创建雷区类 { bool GameOver; //扫雷是否结束 short Rows; //雷区的行数 short Cols; //雷区的列数 short MinesCount; //布设雷的数量 OneMine *pos[50][50]; //存放雷对象的数组指针 public: Mines(); //雷区类构造函数 ~Mines(); //析构函数 friendclass Operation; };
class Operation :public Mines//操作类 { public: void ReInitMine(short row, short col, short mines); //重新初始化雷区 void LayOneMines(); //布置一个地雷 void CalculateAroundMine(int x, int y); //计算每个雷周边的雷数 void ShowOneMine(int x,int y); //触雷时的执行函数 void ShowMine(); //显示未触雷时的雷区情况void ShowAllMine(); //触雷时的触发函数 void OpenOneMine(int x, int y); //打开一个雷位 };
编号 南京航空航天大学 毕业论文 题目用VB实现一个简单的游戏 学生姓名 学号 学院 专业 班级 指导教师
南京航空航天大学 本科毕业设计(论文)诚信承诺书本人郑重声明:所呈交的毕业设计(论文)(题目:)是本人在导师的指导下独立进行研究所取得的成果。尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成果作品。 作者签名:年月日 (学号):
用VB实现一个简单的游戏 摘要 当前,随着计算机应用及网络的的深入普及,越来越多的政府部门、厂矿企业、学校等单位及个人都拥有了自己的计算机,计算机不仅在工作方面给人们以很大的帮助,还给人们带来了多种的娱乐享受.,操作系统自带的游戏也起到了很大的娱乐作用,而且它的开发成本小,所以小游戏的开发在这种形势下就应运而生,它的开发主要采用VC++ ,VB 等编程语言. 本设计采用VB编写,VB一直以来被认为有以下优缺点:优点是上手快、开发效率高;缺点是能力有限,运行效率低.这正是有些软件把VB做为首选语言,而有些软件肯定不会用VB做的原因.而很多VC,DELPHI的程序员都认为VB里搞开发不自由.的确,简单和功能强大这两者本身就是一对矛盾. 扫雷游戏是操作系统中的一个主要的益智类游戏. 用户对鼠标进行操作,单击鼠标左键为踩雷,单击鼠标左键在标记,疑问,空白三种状态中循环,同时单击鼠标左右键为踩单击点在内的周围九格内所有没有标记为已标记的所有格子.同时程序从你单击第一次时开始计时,到胜利或引爆地雷终结.结束后单击开始按钮重新开始游戏.这款游戏实现了开发人类大脑思维的目的. 关键词VB,扫雷游戏
课 程 设 计 扫雷游戏程序设计 2013 年 11 月 5 日 设计题目 学 号专业班级 学生姓名 指导教师
合肥工业大学课程设计任务书
一. 设计任务 (1)鼠标左击排雷,右击插小旗,打问号; (2)方格里面的数字表示方格周围的雷数; (3)能够显示未标记雷数和游戏用时; (4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; (5)可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能; (6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。 二. 具体设计 (一)、设计思路 扫雷游戏是很经典也很有趣的一款游戏,这次的游戏程序设计要求设计出功能与原游戏相近的一款游戏,首先定义变量和类要画出游戏方格以及位图,设计游戏等级,等级越高方格越多雷数也越多;然后设置随机布雷以保证每次重新开始游戏都有不同的雷区地图;另外定义鼠标左击扫雷,左击标记周围埋雷情况,右击奇数次排雷偶数次取消上次排雷,以及扫雷第一次左击不能扫到雷。
(二)、设计表示: 1、鼠标左击排雷,右击插小旗,打问号; 2、方格里面的数字表示方格周围的雷数; 3、能够显示未标记雷数和游戏用时; 4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; 5、可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数); 6、任何时候开始游戏第一次点击不会扫到雷。 由于时间等原因未完成功能: 排行榜和自行定义雷区行数,列数和雷数功能。 (四)、详细设计 1、添加位图 前十二幅是在雷区的,后四幅是按钮。为了便于加载,必须各自保证其连续性。 分别表示游戏进行的状态、结果胜利或触雷。
扫雷游戏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();
中南大学程序设计基础实践报告 题目设计一个和window系统类似的小游戏【挖地雷】 学生姓名张兰兰 学院信息科学与工程学院 专业班级物联网工程1301班 完成时间
目录 1.课程设计内容.......................................... 2.课程设计目的.......................................... 3.背景知识.............................................. 4.工具/准备工作......................................... 5.设计步骤、方法 ........................................ .步骤1:步骤名称(二级标题) ............................................ 步骤:步骤名称(三级标题).......................................... .步骤2:步骤名称 ...................................................... .步骤n:步骤名称 ...................................................... 6.设计结果及分析 ........................................ 7.设计结论.............................................. 8.问题及心得体会 ........................................ 9.对本设计过程及方法、手段的改进建议..................... 10................................................................ 参考文献 报告名称 1.课程设计内容 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常
VC++实现扫雷游戏程序 摘要: 本课程设计实现类似于Windows操作系统自带的扫雷游戏。在课程设计中,系统开发平台为Windows XP,程序设计语言采用Visual C++,程序运行平台为Windows 2000/XP。在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组的行和列、当前状态、方块属性、历史状态的结构体,采用了MFC机制解决问题的方法。整个游戏程序包括了布雷、扫雷过程和结果三个阶段,在处理鼠标响应事件中伴随着GDI绘图。程序通过调试运行,实现了设计目标,能够同时满足扫雷游戏初学者和高手的需要。 关键词:扫雷游戏程序设计;Visual C++ 6.0;GDI绘图 1 绪论 1.1 扫雷游戏的起源 扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。不久之后,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆·安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师在Windows 3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。 1.2 Visual C++ Visual C++为用户提供了一个可视化、通用的应用程序集成开发环境——Visual Studio。Visual Studio包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具以及一套联机文档(MSDN)。通过Visual Studio,开发人员可以完成项目工程的创建、程序的编辑、修改、运行和调试等各种操作。Visual Studio采用标准的多窗口用户界面,提供了大量实用工具以支持可视化编程的特性,包括项目工作区、AppWizard (应用程序向导)、ClassWizard(类向导)、WizardBar(向导工具条)、Component Gallery(组
实用标准 中南大学 程序设计基础实践报告 题目设计一个和window系统类似的小游戏【挖地雷】学生姓名张兰兰 学院信息科学与工程学院 专业班级物联网工程1301班 完成时间 2014.1
目录 1.课程设计内容 (3) 2.课程设计目的 (3) 3.背景知识 (3) 4.工具/准备工作 (5) 5.设计步骤、方法 (5) 5.1. 步骤1:步骤名称(二级标题) .......................... 错误!未定义书签。 5.1.1. 步骤1.1:步骤名称(三级标题) (5) 5.2. 步骤2:步骤名称.................................... 错误!未定义书签。 5.3. 步骤n:步骤名称.................................... 错误!未定义书签。 6.设计结果及分析 (5) 7.设计结论 (15) 8.问题及心得体会 (16) 9.对本设计过程及方法、手段的改进建议 (17) 10.参考文献 (17)
报告名称 1.课程设计内容 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows 操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用C-free编写了与它功能相仿的挖地雷游戏,寓学于乐。 即:设计一个功能与Windows中的挖雷游戏相同的小游戏。 2.课程设计目的 1.培养学生综合运用所学知识独立完成课题的能力。 2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 4.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核 3.背景知识 游戏玩法:以windows XP自带扫雷winmine.exe为例 游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为9*9个方块10个雷,中级为16*16个方块40个雷,高级为16*30个方块99个雷,
《计算机图形学》课程设计报告 VC++扫雷游戏的程序设计 专业班级: 小组成员: 指导老师: 日期:2012年12月24日
1、需求分析 本课程设计实现类似于Windows XP 操作系统自带的扫雷游戏。该设计以V isual C++ 6.0为开发环境, Windows 7/XP 为程序运行平台。在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组的行和列、当前状态、方块属性、历史状态的结构体,采用了MFC 机制解决问题的方法。整个游戏程序包括了布雷、扫雷过程和结果三个阶段,在处理鼠标响应事件中伴随着GDI 绘图。程序通过调试运行,实现简单的设计目标,满足扫雷游戏初学者的需要。 通过本课程设计,以便更好的巩固计算机图形学相关知识,掌握课程设计基本的方法和技巧,同时增加同学之间的团队合作精神以及培养分析问题、解决问题的能力。 2.总体设计 2.1 功能概述 扫雷游戏的游戏界面如图1所示。在这个界面中,由众多面积均等的小方块所组成的区域称之为雷区,雷区的大小由用户设置的游戏等级决定。
图1 游戏开始时,系统会在雷区中随机布下若干个地雷。安放地雷的小方块称之为雷方块,其他的称之为非雷方块。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中有多少雷方块。玩家可以根据这些信息去判断是否可以鼠标点击方块,并把认为是地雷的方块打上标识。当玩家将所有地雷找出后,其余的非雷方块区域都已打开,此时游戏结束。在游戏过程中,一旦错误地打开了雷方块则立即失败,游戏结束。 游戏规则总结: ●开始:按左键开始游戏,按按钮或菜单重新开始。 ●左键:按下时,是雷则结束,非雷则显示数字。 ●数字:代表此数字周围一圈八格中雷的个数。 ●右键:奇次按下表示雷,偶数按下表示对上次的否定。 ●结束:左键按到雷结束,找出全部雷结束。 在游戏开始后,雷区上方有两个计数器。右边的计数器显示用户扫雷所花费的总时间,以秒为单位;左边的计数器显示当前还剩余多少个雷方块。 2.2 设计流程图
VC++程序设计大作业设计报告 设计题目经典扫雷程序设计 学生专业班级 学生姓名(学号) 设计小组其他同学姓名(学号)无 指导教师 完成时间 2014.4.17 设计地点信息楼机房 2014 年 4 月 17 日 经典扫雷游戏程序设计 目录
摘要 (3) 1、概述 (4) 1.1扫雷游戏设计的目的和意义 (4) 1.2 扫雷游戏功能简介 (4) 1.3扫雷游戏设计构想 (4) 1.4扫雷游戏流程规划 (5) 2、扫雷游戏的具体实现过程 (6) 2.1扫雷游戏模块的实现 (6) 2.1.1 扫雷游戏主窗体的创建 (6) 2.1.2 主界面控制菜单的设计 (9) 2.2扫雷游戏核心-----布雷算法设计 (10) 2.3 扫雷鼠标事件的处理 (15) 2.4扫雷其它处理 (23) 2.4.1难度设置菜单消息处理 (23) 2.4.2背景音乐菜单消息处理 (23) 2.4.3其它处理 (24) 3、扫雷游戏程序的调试与运行 (24) 4、扫雷游戏设计总结 (26) 4.1分析与总结 (27) 4.2所遇到的问题及解决方案 (27) 4.3体会收获及建议 (27) 5、参考文献 (28) 6、教师评语 (29) 摘要 扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法和语言实现,如C,C++,VB,JA V A等。本论文研究的是以Visual C++ 6.0为开发环境,设计并开发一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。论文首先介绍了制作游
戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。 关键字:扫雷;Visual C++ 6.0;事件;递归 1 概述 1.1扫雷程序设计的目的和意义 经过了一学期的对《Visual C++面向对象编程》的学习,使我对此门课程有了更深层
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. 背景知识 游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于
#include
/**/ #ifndef BLOCK_H_ #define BLOCK_H_ #include
} void Block::set_number(int number) { number_=number; } void Block::turn_over() { if(!turn_over_flag_){ turn_over_flag_=true; if(mine_flag_) setPixmap(QPixmap(":/images/")); else setPixmap(QPixmap(":/images/mine_"+QString("%1").arg(number_)+".png ")); update(); } } bool Block::is_mine()const { return mine_flag_; } bool Block::is_turn_over()const { return turn_over_flag_; } /*鼠标事件的实现*/ void Block::mousePressEvent(QMouseEvent*event) { if(event->button()==Qt::LeftButton){ if(!turn_over_flag_&&!mark_flag_){ turn_over_flag_=true; if(mine_flag_==true){ setPixmap(QPixmap(":/images/")); update(); emit turn_over(true); }else{ setPixmap(QPixmap(":/images/mine_"+QString("%1").arg(number_)+".png ")); update(); emit turn_over(false); } }
/*block.h*/ #ifndef BLOCK_H_ #define BLOCK_H_ #include