扫雷游戏课程设计报告文档格式.docx

上传人:b****5 文档编号:18776515 上传时间:2023-01-01 格式:DOCX 页数:29 大小:281.27KB
下载 相关 举报
扫雷游戏课程设计报告文档格式.docx_第1页
第1页 / 共29页
扫雷游戏课程设计报告文档格式.docx_第2页
第2页 / 共29页
扫雷游戏课程设计报告文档格式.docx_第3页
第3页 / 共29页
扫雷游戏课程设计报告文档格式.docx_第4页
第4页 / 共29页
扫雷游戏课程设计报告文档格式.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

扫雷游戏课程设计报告文档格式.docx

《扫雷游戏课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《扫雷游戏课程设计报告文档格式.docx(29页珍藏版)》请在冰豆网上搜索。

扫雷游戏课程设计报告文档格式.docx

IndexPanel类

成员变量

变量意义

变量类型

名称

long

serialVersionUID

增加雷按钮值

boolean

buAdd

减少雷按钮值

buDec

玩游戏按钮值

buPlay

成员方法

方法名称

功能

备注

IndexPanel

初始化参数

构造方法

paint

绘出游戏界面

mousePressed

实现鼠标单击事件

接口方法

mouseReleased

实现鼠标释放事件

该类实现游戏的开始界面,继承了JPanel同时实现了监听MouseListener(鼠标监听)事件。

主要用于选定炸弹的数目,即游戏的难易程度,点击play按钮则开始游戏。

炸弹数量默认为60。

publicvoidpaint(Graphicsg){}

采用画笔的方式设计界面,布局清晰,实现窗口的定位。

例如:

//画设置炸弹数目的小球(40)

g.setColor(Color.white);

//画笔的颜色

g.fillOval(40,120,30,30);

//画的图形是实心圆

g.setColor(Color.gray);

//重新设置画笔的颜色

g.drawOval(40,120,30,30);

//画的图形是空心圆

g.drawString("

40"

47,142);

//图形上面的字符串

//画PLAY按钮

g.setColor(Color.white);

g.draw3DRect(30,320,120,30,buPlay);

PLAY"

70,340);

publicvoidmousePressed(MouseEvente){;

}

鼠标点击事件,实现炸弹的选择。

MyPanel类

返回后重新开始

int

replay

每插一旗变量加一

win

判断是否赢

gameWin

判断是否结束

gameOver

是否有雷的标志

int[]

bombFlag

方块周围雷数

count

雷坐标

Int[]

bomb_x,bomb_y

判断是否插旗

hadFlag

判断插旗是否正确

check

插旗错误点的坐标

check_x,check_y

判断是否点击过

clicked

判断是否已经清除过

clearFlag

MyPanel

初始bombCount变量

绘出雷区,初始化雷区,及定义雷区功能,包括插旗、判断输赢等

系统核心部分,使用了窗口定位,绘画等技术

实现鼠标点击事件,挖开方块

clear

清除点击处周围安全非提示方块

keyPressed

实现键盘事件,插旗

该类是游戏界面,也是最核心的类。

不仅继承了JPanel类,也通过鼠标和键盘的监听事件,实现扫雷游戏。

之前选择的炸弹随机分布在24*17个小方格内。

插旗提示:

鼠标放在方格上,按空格键插旗。

publicvoidpaint(Graphicsg){//采用画布的方式添加方格

super.paint(g);

if(replay==1){

for(inti=0;

i<

bombCount;

i++){

bomb_x[i]=(int)(Math.random()*24-0.1);

bomb_y[i]=(int)(Math.random()*16-0.1);

hadFlag[i]=0;

24*17;

bombFlag[i]=0;

count[i]=0;

clicked[i]=0;

clearFlag[i]=0;

}

publicvoidkeyPressed(KeyEvente){;

}//鼠标点击后游戏进程

publicvoidclear(inti,intj){;

}//清除点击处周围的安全非提示方块

3.publicclassIndex{

staticIndexPanelpanel1;

staticMyPanelpanel2;

...

该类是游戏的主类,引用了静态的IndexPanel类以及MyPanel类。

主要决定页面设计,窗口大小,以及添加事件。

运行程序

选择炸弹数量

点击play按钮

开始游戏

点到雷,则游戏失败

否则成功

炸弹数量越多,难度越大。

publicvoidmouseReleased(MouseEvente){

if(e.getX()>

=30&

&

e.getX()<

=80&

e.getY()>

=70

e.getY()<

=100){

buAdd=true;

MyPanel.bombCount++;

=100&

=150&

buDec=true;

MyPanel.bombCount--;

=320

=350){

buPlay=true;

this.setVisible(false);

Index.panel2.setVisible(true);

repaint();

publicvoidmousePressed(MouseEvente){

buAdd=false;

buDec=false;

=40&

=70&

=120

=150){

MyPanel.bombCount=40;

buPlay=false;

点击游戏主面板的任一方格

publicvoidmousePressed(MouseEvente){

replay=0;

if((e.getX()>

420&

480&

380&

405)){

System.out.println("

fahui"

);

check=1;

replay=1;

win=0;

gameOver=0;

gameWin=0;

bombCount=60;

this.setVisible(false);

Index.panel1.setVisible(true);

else{

if((e.getY()<

375)&

gameOver==0&

gameWin==0){

intmouse_i=e.getX()/22;

intmouse_j=e.getY()/22;

clicked[mouse_i*17+mouse_j]=1;

if((mouse_i==bomb_x[i])&

(mouse_j==bomb_y[i])){

gameOver=1;

break;

if((count[mouse_i*17+mouse_j]==0)&

(gameOver==0)){

clear(mouse_i,mouse_j);

else{

if((gameOver==1||gameWin==1)&

(e.getX()>

68&

128&

390&

420)){

A.没有返回键

相互讨论,添加replay按钮,点击后所有数据初始化,重新开始回到选择界面。

B.插旗相关函数

查阅相关资料,讨论,最终设定鼠标放在方格上,按空格键插旗。

没有用文本或者是其他方式保存数据,每次用户结束游戏之后,数据没有保存。

因此没办法实现排行榜等数据比较功能。

Java程序语言设计一种可以撰写跨平台应用软件的面向对象的程序设计语言。

在这次的课程设计中不仅检验了我们所学习的知识,也学会了完成一件事情的方法和技巧。

在设计过程中,和同学们相互探讨,相互学习,相互监督。

学会了宽容,学会了理解,课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作、一个必不少的过程.通过这次课程设计,明白除了日常的理论学习,还要多实践,把所学的知识运用在真正的实践上。

而完成课程设计,不仅是对我们学习情况的检验,也是对自己的一次考验。

Index.java

packagesaolei;

importjava.awt.CardLayout;

importjava.awt.Image;

importjavax.swing.ImageIcon;

importjavax.swing.JFrame;

publicclassIndex{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame();

frame.setSize(546,415+50);

frame.setLocation(300,100);

panel1=newIndexPanel();

panel2=newMyPanel();

frame.add(panel1);

//index界面面板

frame.add(panel2);

//游戏主面板

ImageIconicon=newImageIcon("

Image/rightImage.png"

ImagerightImage=icon.getImage();

frame.setIconImage(rightImage);

frame.addMouseListener(panel1);

panel1.addMouseListener(panel1);

frame.addMouseListener(panel2);

panel2.addMouseListener(panel2);

frame.addKeyListener(panel2);

panel2.addKeyListener(panel2);

frame.setLayout(newCardLayout());

frame.setVisible(true);

MyPanel.java

importjava.awt.BasicStroke;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.awt.Graphics2D;

importjava.awt.MouseInfo;

importjava.awt.Point;

importjava.awt.event.KeyEvent;

importjava.awt.event.KeyListener;

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

importjavax.swing.JPanel;

publicclassMyPanelextendsJPanelimplementsMouseListener,KeyListener{

staticintreplay=1;

//返回后从新开始

intwin=0;

//每插一个旗就增一

intgameWin=0;

//判断游戏是否赢

privatestaticfinallongserialVersionUID=1L;

staticintgameOver;

//判断游戏是否结束

int[]bombFlag=newint[24*17];

//bombFlag[]为是否是雷的标志,如果该空格是雷则相应的位置的bombFlag为1,默认为0

int[]count=newint[24*17];

//count为此方块周围雷的个数

staticintbombCount=120;

//雷的坐标数组,数值为整数,不是绝对坐标,而是相对坐标

int[]bomb_x=newint[bombCount];

int[]bomb_y=newint[bombCount];

int[]hadFlag=newint[bombCount];

//判断是否有插旗

intcheck=1;

//判断插旗是否正确

intcheck_x,check_y;

//插旗错误定点的相当坐标

int[]clicked=newint[24*17];

//判断是否点击过

int[]clearFlag=newint[24*17];

//判断是否已经clear过

publicMyPanel(){

//System.out.println(bomb_x[55]);

publicvoidpaint(Graphicsg){

//设置画笔的宽度

Graphics2Dg2D=(Graphics2D)g;

g2D.setStroke(newBasicStroke(3f));

//画雷上的遮盖物

24;

for(intj=0;

j<

17;

j++){

//将所有的方格都初始化为非炸弹

bombFlag[i*17+j]=0;

//注意这里是用或,否则同行,同列将都会被现实出来

if(clicked[i*17+j]==0){

g.setColor(newColor(150,230,250));

g.fillRect(22*i+2,22*j+2,20,20);

//布雷,雷的个数为bombCount

//bomb_x和bomb_y分别为炸弹的列数和行数,都是从0开始

g.setColor(Color.red);

g.fillOval(22*bomb_x[i]+2,22*bomb_y[i]+2,20,20);

if(hadFlag[i]==1){

g.setColor(Color.green);

g.fillRect(22*bomb_x[i]+8,22*bomb_y[i]+8,10,8);

g.fillRect(22*bomb_x[i]+8,22*bomb_y[i]+8,2,12);

bombFlag[bomb_x[i]*17+bomb_y[i]]=1;

//计算当前方块周围有几个雷,再写出来

//注意数组下表越界不会报错但是运行不了

g.setColor(Color.black);

count[i*17+j]=0;

if((i-1>

=0)&

(j-1>

=0)

(bombFlag[(i-1)*17+(j-1)]==1)){

count[i*17+j]++;

if((j-1>

(bombFlag[i*17+(j-1)]==1)){

if((i+1<

=23)&

(bombFlag[(i+1)*17+(j-1)]==1)){

(bombFlag[(i+1)*17+j]==1)){

(j+1<

=16)

(bombFlag[(i+1)*17+(j+1)]==1)){

if((j+1<

=16)&

(bombFlag[i*17+(j+1)]==1)){

(bombFlag[(i-1)*17+(j+1)]==1)){

(bombFlag[(i-1)*17+j]==1)){

if(count[i*17+j]!

=0&

bombFlag[i*17+j]!

=1)

"

+count[i*17+j],22*i+2,

22*j+20);

if(check==0){

g.setColor(Color.blue);

//System.out.println(check_x*17+check_y);

clicked[check_x*17+check_y]=1;

g.drawLine(check_x*22+4,check_y*22+4,check_x*22+20,

check_y*22+20);

g.drawLine(check_x*22+20,check_y*22+4,check_x*22+4,

for(inti=0;

i<

24;

i++){

for(intj=0;

j<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1