這里是隨機生成二維坐標,頁面方面可以使用JButton

我們提供的服務有:成都做網(wǎng)站、成都網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、棗陽ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的棗陽網(wǎng)站制作公司
import java.util.Random;
public class SweepMine {
int row=20;
int column=20;
int array[][]=new int[row][column];
int mineNum=40;
boolean bool=true;
public void init(){
Random r =new Random();
for(int i=0;irow;i++)
for(int j=0;jcolumn;j++)
array[i][j]=0;
for(int k=0;kmineNum;k++){
bool=true;//由于隨機生成的坐標可能已是地雷,所以這里設置標記,使其循環(huán)獲取
while(bool){
int x=r.nextInt(row-1);
int y=r.nextInt(column-1);
if(x=row)
x=x%row;
if(y=column)
y=y%column;
if(array[x][y]==0){
array[x][y]=1;
bool=false;
}
}
}
}
public void print(){
int n=0;
for(int i=0;irow;i++){
for(int j=0;jcolumn;j++){
System.out.print(array[i][j]+" ");
if(array[i][j]==1)
n++;
}
System.out.println();
}
System.out.println("地雷數(shù)量:"+n);
}
public static void main(String[]args){
SweepMine sw=new SweepMine();
sw.init();
sw.print();
}
}
掃雷游戲的算法概述:
你可以把地雷所在的區(qū)域抽象成一個二維數(shù)組。數(shù)組里的元素是該地周圍的雷數(shù)。然后根據(jù)玩家所設定的地雷個數(shù)用一個隨機數(shù)生成器來撒雷。有雷的地方可以用-1來表示,沒有雷的地方在撒雷的時候數(shù)它旁邊的雷數(shù),然后將值填入對應的數(shù)組元素里。這樣,你的雷陣已經(jīng)部署完畢。
接下來是玩家的操作了。如果你有仔細觀察的話,當你點擊一個位置的是后發(fā)生的情況有3種:
1. 如果該處有雷的話,很簡單,游戲結束
2. 如果該處沒有雷,但是這個地方附近有至少一個雷的話,只將當前的位置周圍雷數(shù)顯示出來。
3. 如果該處沒有雷,并且附近也沒有雷的話,就用一個循環(huán)或是遞歸的方法將它四周的沒有雷的地方也顯示出來。如果他四周的位置的四周也沒有雷的話,繼續(xù)這個過程,知道四周至少有一個雷時候停止。
玩家事件的處理:
玩家的事件有三種:單擊,左右鍵同時點擊,和右擊。
單擊可以想象成走到該處,如果有雷的話就游戲結束,沒有的話就根據(jù)我以上講的三點來判斷該做什么。
左右鍵同時點擊的話就將該處四周可能有雷的地方顯示出來,如果玩家錯將沒有雷的地方放了小紅旗的話,游戲結束。
右擊是放小紅旗。
當所有雷都被清楚的時候,游戲結束,玩家勝利。
import java.awt.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.Timer;
import java.awt.event.*;
import javax.swing.border.*;
/**
* pTitle:掃雷/p
*
* pDescription:學JAVA以來做的第一個游戲,程序中可能還有些BUG,希望大家提出來供一起探討,
* 如果要測試記錄文件,可以把雷的數(shù)量改的少一點,
* arithmetic中的while(landmintTally99), button_mouseClicked中的
* if((landmineNum-1)==0),有3處,表示還剩的雷數(shù).completeGame中的
* for (int i=0; i99; i++)/p
* pCopyright: Copyright (c) 2006/p
*
* pCompany: private /p
*
* @author cqp
* @version demo
*/
public class shaolei extends JFrame {
/**類的屬性和控件實例化*/
ImageIcon ButtonIcon; //按鈕的圖片;
HashMap map = new HashMap(); //雷和數(shù)字的狀態(tài),鍵為位置(0-479),值為狀態(tài),0-6為數(shù)字,7為雷;
HashMap flag_landmine = new HashMap(); //按鈕上打的標記,如問號,對勾和取消,8為標記雷,9為問號,10為默認值空;
JMenuBar file = new JMenuBar(); //菜單欄;
JMenu game = new JMenu(); //菜單按鈕;
JMenuItem start = new JMenuItem(); //菜單項;
JMenuItem record = new JMenuItem(); //菜單項;
JMenuItem quit = new JMenuItem(); //菜單項;
JMenuItem clearReocrd = new JMenuItem();//菜單項;
JMenu help = new JMenu(); //菜單按鈕;
JButton[] cardsBtn = new JButton[480]; //480個按鈕;
JButton beginBtn = new JButton(); //開始按鈕;
JPanel pane = new JPanel(); //雷區(qū)面板;
JPanel paneTime = new JPanel(); //記數(shù)器所在的面板;
JOptionPane saveRecord = new JOptionPane(); //保存記錄對話框;
JTextField landmineTally = new JTextField("99");//所剩雷的計數(shù)器;
JTextField timeTally = new JTextField("0"); //時間計數(shù)器;
GridLayout gridLayout1 = new GridLayout(); //網(wǎng)格布局;
Timer timer; //線程設施;
String[] landmine = new String[99]; //存放雷的位置,用來判斷雷的位置是否重復;
slFrame_button_actionAdatper[] buttonClick =new slFrame_button_actionAdatper[480];//雷區(qū)按鈕的事件類;
int mouseKey=0; //得到鼠標先按下的哪個鍵,用來判斷鼠標是否同時按下了左右鍵;
int timeCount = 0; //時間計數(shù)器;
/**構造方法*/
public shaolei() {
try {
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**界面設置*/
private void jbInit() throws Exception {
getContentPane().setLayout(null);
this.setJMenuBar(file);
game.setText("游戲");
start.setText("開局");
start.addActionListener(new slFrame_start_actionAdapter(this));
record.setText("排行榜");
record.addActionListener(new slFrame_record_actionAdapter(this));
quit.setText("退出");
quit.addActionListener(new slFrame_quit_actionAdapter(this));
help.setText("幫助");
clearReocrd.setText("清除記錄");
clearReocrd.addActionListener(new slFrame_clearReocrd_actionAdapter(this));
landmineTally.setBounds(new Rectangle(5, 5, 40, 25));
landmineTally.setBackground(new Color(0,0,0));
landmineTally.setForeground(new Color(255,0,0));
landmineTally.setFont(new java.awt.Font("Times New Roman", Font.BOLD, 20));
landmineTally.setBorder(BorderFactory.createBevelBorder(1));
landmineTally.setEditable(false);
timeTally.setBounds(new Rectangle(520, 5, 50, 25));
timeTally.setBackground(new Color(0,0,0));
timeTally.setForeground(new Color(255,0,0));
timeTally.setHorizontalAlignment(4);
timeTally.setFont(new java.awt.Font("Times New Roman", Font.BOLD, 20));
timeTally.setBorder(BorderFactory.createBevelBorder(0));
timeTally.setEditable(false);
beginBtn.setBounds(new Rectangle(250, 5, 25, 25));
beginBtn.setBorder(BorderFactory.createBevelBorder(0));
beginBtn.addActionListener(new slFrame_beginBtn_actionAdatper(this));
beginBtn.setIcon(createImageIcon("images/laugh.jpg"));
paneTime.setBounds(new Rectangle(0, 0, 585, 35));
paneTime.setBorder(BorderFactory.createEtchedBorder());
paneTime.setLayout(null);
paneTime.add(landmineTally);
paneTime.add(timeTally);
paneTime.add(beginBtn);
pane.setBounds(new Rectangle(0, 35, 590, 320));
pane.setLayout(gridLayout1);
gridLayout1.setColumns(30);
gridLayout1.setRows(16);
file.add(game);
file.add(help);
game.add(start);
game.add(record);
game.add(quit);
help.add(clearReocrd);
this.getContentPane().add(pane);
this.getContentPane().add(paneTime);
ActionListener listener = new ActionListener(){ //自定義線程
public void actionPerformed(ActionEvent e){
timeCount++;
timeTally.setText(Integer.toString(timeCount));
}
};
timer = new Timer(1000, listener); //增加線程,并每1秒執(zhí)行一次;
for (int i=0;i480;i++) //實例化480個小按鈕加到面板pane中
{
cardsBtn[i] = new JButton();
cardsBtn[i].setText(""); //按鈕上的文字去掉;
cardsBtn[i].setBorder(null); //按鈕的邊框去掉;
pane.add(cardsBtn[i]);
}
}
/**主方法*/
public static void main(String[] args) {
shaolei frame = new shaolei();
frame.setSize(580,410);
frame.setTitle("掃雷");
frame.show();
frame.setResizable(false); //不能修改窗體大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //點關閉按鈕時直
}
/**自定義方法,用來給按鈕增加圖片*/
protected static ImageIcon createImageIcon(String path){
java.net.URL imgURL = shaolei.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
/**菜單按鈕的事件,開始游戲*/
public void start_actionPerformed(ActionEvent e) {
start(); //初始化;
arithmetic(); //計算雷的位置;
calculate(); //計算雷的分布情況;
timer.start(); //時間線程開始;
}
/**開始游戲按鈕的事件*/
public void beginBtn_mouseClicked(ActionEvent e){
start_actionPerformed(e); //直接調(diào)用菜單的事件;
}
/**自定義方法,游戲從這里開始,方法里對按鈕的屬性和狀態(tài)進行初始化;*/
void start(){
timeCount=0; //時間從0開始;
landmineTally.setText("99");//所剩雷數(shù)為99;
for (int i = 0; i480; i++){
cardsBtn[i].setIcon(null); //清除按鈕上的圖片;
map.put( Integer.toString(i),Integer.toString(10)); //分布狀態(tài)全為10,表示為空;
flag_landmine.put( Integer.toString(i),Integer.toString(10)); //標記狀態(tài)全為10;
cardsBtn[i].removeMouseListener(buttonClick[i]); //去除雷區(qū)所有按鈕的鼠標事件;
}
}
/**自定義方法,用來計算雷的分布位置*/
void arithmetic(){
Calendar time = Calendar.getInstance(); //日歷類,得到當前時間;
int leed = time.get(Calendar.SECOND); //得到當前時間的秒;
Random rand = new Random(leed); //把秒數(shù)當個隨機數(shù)的種子;
int tempRand; //臨時隨機數(shù);
int landmintTally=0; //得到多少雷的計數(shù)器;
boolean flag=false; //標記是否重復;
int tempNum;
while(landmintTally 99){ //最多只能有99顆雷;
tempRand = (int)(rand.nextFloat()*480); //得隨機數(shù);
tempNum = Integer.parseInt(map.get(Integer.toString(tempRand)).toString());
if (tempNum == 7) continue; //如果重復執(zhí)行一個數(shù)字;
landmine[landmintTally] = Integer.toString(tempRand); //把得到的位置放進字符串;
map.put(Integer.toString(tempRand),Integer.toString(7)); //把得到的位置放到map集合里,值為7,表示有雷;
landmintTally++; //計數(shù)器加1;
}
}
/**計算雷的分部情況,指一個按鈕周圍有多少雷;*/
void calculate()
{
int num; //按鈕的狀態(tài);
int sum=0; //計數(shù)器,計算周圍有幾顆雷;
int leftUp, up, rightUp, left, right, leftDown, down, rightDown; //定義了8個位置
for (int i = 0; i480; i++)
{
leftUp = i-31;
up = i-30;
rightUp = i-29;
left = i-1;
right = i+1;
leftDown = i+29;
down = i+30;
rightDown= i+31;
cardsBtn[i].setBorder(BorderFactory.createBevelBorder(0)); //設置按鈕的邊框樣式;
buttonClick[i] = new slFrame_button_actionAdatper(this,i); //實例化事件類;
cardsBtn[i].addMouseListener(buttonClick[i]); //給當前按鈕添加鼠標事件;
num = Integer.parseInt(map.get(Integer.toString(i)).toString());//得到當前按鈕的狀態(tài);
if (num == 7){
continue; //如果這個按鈕的狀態(tài)為雷,跳到下個按鈕;
}
if (i == 0) { //左上角第一顆雷;
num = Integer.parseInt(map.get(Integer.toString(i)).toString());
if ( Integer.parseInt(map.get(Integer.toString(right)).toString()) == 7 ) sum++; //如果是雷計數(shù)器加1;
if ( Integer.parseInt(map.get(Integer.toString(down)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightDown)).toString()) == 7 ) sum++;
map.put(Integer.toString(0),Integer.toString(sum)); //把得到的數(shù)字放到當前的位置;
sum=0; //計數(shù)器清零;
continue; //下個按鈕;
}else if (i == 29) { //右上角第一顆雷;
if ( Integer.parseInt(map.get(Integer.toString(left)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(leftDown)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(down)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
continue;
}else if (i == 450) { //左下角第一顆雷;
if ( Integer.parseInt(map.get(Integer.toString(right)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(up)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightUp)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
continue;
}else if (i == 479) { //右下角第一顆雷;
if ( Integer.parseInt(map.get(Integer.toString(left)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(leftUp)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(up)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
return;
}else if (i29){ //第一行;
if ( Integer.parseInt(map.get(Integer.toString(left)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(leftDown)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(down)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(right)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightDown)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
continue;
}else if (i450){ //最后一行;
if ( Integer.parseInt(map.get(Integer.toString(leftUp)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(up)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightUp)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(left)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(right)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
continue;
}else if ( (i%30) == 0 ){ //第一列;
if ( Integer.parseInt(map.get(Integer.toString(up)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightUp)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(right)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(down)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightDown)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
continue;
}else if ( ((i+1)%30) == 0 ){ //最后一列;
if ( Integer.parseInt(map.get(Integer.toString(leftUp)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(up)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(left)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(leftDown)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(down)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
continue;
}else{ //除去四周剩下的;
if ( Integer.parseInt(map.get(Integer.toString(leftUp)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(up)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightUp)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(left)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(right)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(leftDown)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(down)).toString()) == 7 ) sum++;
if ( Integer.parseInt(map.get(Integer.toString(rightDown)).toString()) == 7 ) sum++;
map.put(Integer.toString(i),Integer.toString(sum));
sum=0;
continue;
}
}
}
/**鼠標點擊事件,參數(shù)i為點擊按鈕的位置 */
public void button_mouseClicked(MouseEvent e,int i){
int mKey = e.getButton(); //點擊的哪個鍵;
int landmineNum = Integer.parseInt(landmineTally.getText().toString()); //所剩的雷數(shù);
int num = Integer.parseInt(map.get(Integer.toString(i)).toString()); //當前按鈕的狀態(tài);
int flag = Integer.parseInt(flag_landmine.get(Integer.toString(i)).toString());//當前按鈕的標記狀態(tài);
if ( (mKey == 3) ( cardsBtn[i].getBorder()!= null)){ //點擊為鼠標右鍵,并且邊框不為空(空的表示已按亮開的);
if (flag == 10){ //如果沒有標記,則改為標記狀態(tài);
flag_landmine.put(Integer.toString(i),Integer.toString(8));
ButtonIcon = createImageIcon("images/8.jpg");
cardsBtn[i].setIcon(ButtonIcon);
landmineTally.setText( Integer.toString(landmineNum - 1) );
if ( (landmineNum-1) == 0) //如果標記的雷數(shù)為99;
completeGame(); //完成游戲;
}else if (flag == 8){ //如果為標記狀態(tài),則改為問號;
flag_landmine.put(Integer.toString(i),Integer.toString(9));
ButtonIcon = createImageIcon("images/9.jpg");
cardsBtn[i].setIcon(ButtonIcon);
landmineTally.setText( Integer.toString(landmineNum + 1) );
if ( (landmineNum+1) == 0) //如果標記的雷數(shù)為99;
completeGame(); //完成游戲;
}else if (flag == 9){ //如果為問號,則取消標記;
flag_landmine.put(Integer.toString(i),Integer.toString(10));
cardsBtn[i].setIcon(null);
}
}else if (mKey == 1){ //如果點擊為鼠標左鍵;
flag_landmine.put(Integer.toString(i),Integer.toString(10)); //先清除所點擊按鈕的標記狀態(tài);
if ( (landmineNum+1) == 0) //如果標記的雷數(shù)為99;
completeGame(); //完成游戲;
if (num == 7){ //如果銨鈕的狀態(tài)為雷,則結束游戲;
overGame(i);
}else if (num == 0){ //如果雷數(shù)為空
if ( flag == 8 ){ //如果已經(jīng)標記為雷,計數(shù)器加1;
landmineTally.setText( Integer.toString(landmineNum + 1) );
}
ButtonIcon = createImageIcon("images/0.jpg");
cardsBtn[i].setIcon(ButtonIcon);
cardsBtn[i].setBorder(null);
display(i); //亮開周圍的按鈕;
}else { //數(shù)字為1-6之間,亮開按鈕,并顯示數(shù)字所對應的圖片;
if ( flag == 8 ){ //如果已經(jīng)標記為雷,計數(shù)器加1;
landmineTally.setText( Integer.toString(landmineNum + 1) );
}
ButtonIcon = createImageIcon("images/"+num+".jpg");
cardsBtn[i].setIcon(ButtonIcon);
cardsBtn[i].setBorder(null);
}
}
if ( (mouseKey==1 mKey == 3) || (mouseKey==3 mKey == 1) ){ //鼠標左右鍵同時點按下;
open(i); //亮開周圍的按鈕(先判斷);
}
mouseKey = 0;
}
/**自定義方法,用來判斷是否要亮開周圍的按鈕*/
void open(int i){
int landmineAmount = 0; //實際的雷數(shù);
int flagAmount=0; //標記的雷數(shù);
int landmine_leftUp=0, landmine_up=0, landmine_rightUp=0, landmine_left=0, landmine_right=0,
landmine_leftDown=0, landmine_down=0, landmine_rightDown=0; //定義了實際雷的8個位置
int flag_leftUp=0, flag_up=0, flag_rightUp=0, flag_left=0, flag_right=0,
flag_leftDown=0, flag_down=0, flag_rightDown=0; //定義了標記雷的8個位置
//實際雷所在的8個位置和標記雷的8個位置,如果不加判斷則hashMap集合會越界;
if (i 31) landmine_leftUp = Integer.parseInt(map.get(Integer.toString(i-31)).toString());
if (i 30) landmine_up = Integer.parseInt(map.get(Integer.toString(i-30)).toString());
if (i 29) landmine_rightUp = Integer.parseInt(map.get(Integer.toString(i-29)).toString());
if (i 1) landmine_left = Integer.parseInt(map.get(Integer.toString(i-1)).toString());
if (i 479) landmine_right = Integer.parseInt(map.get(Integer.toString(i+1)).toString());
if (i 450) landmine_leftDown = Integer.parseInt(map.get(Integer.toString(i+29)).toString());
if (i 449) landmine_down = Integer.parseInt(map.get(Integer.toString(i+30)).toString());
if (i 448) landmine_rightDown = Integer.parseInt(map.get(Integer.toString(i+31)).toString());
if (i 31) flag_leftUp = Integer.parseInt(flag_landmine.get(Integer.toString(i-31)).toString());
if (i 30) flag_up = Integer.parseInt(flag_landmine.get(Integer.toString(i-30)).toString());
if (i 29) flag_rightUp = Integer.parseInt(flag_landmine.get(Integer.toString(i-29)).toString());
if (i 1) flag_left = Integer.parseInt(flag_landmine.get(Integer.toString(i-1)).toString());
if (i 479) flag_right = Integer.parseInt(flag_landmine.get
太長了寫不完,我把壓縮包發(fā)給你吧,49905518注意查收
這些東西早忘光了說下我的理解希望可以幫助你把。
你先想好用什么來做,java swing里面做這個的,我記得這個東西可以直接用button來做的。
這些button形成一個矩形,用一個數(shù)組來記錄每個位置,比如point (x,y)這種。
用一個map來存放每個位置上button的狀態(tài),比如用0表示是雷,1不是。2是已經(jīng)顯示空白的區(qū)域,最后可能就是map((x,y),1);這種。
然后基本就是一些邏輯問題了,比如隨機地雷位置(設置3里面隨機數(shù)設置多少個是01).怎么右鍵點擊顯示周圍雷個數(shù),這些都是不少工作。
我能想到的就這些,畢竟過了很久了,你現(xiàn)在要是上學的話就抓緊寫這個東西,我感覺你有了思路查資料的話一個禮拜差不多也就能看得出能不能做出來,不能做出來在找源碼學吧,這些東西自己先做一遍和看源碼在學習效果差挺多。
"掃雷"小游戲C代碼
#includestdio.h
#includemath.h
#includetime.h
#includestdlib.h
main( )
{char a[102][102],b[102][102],c[102][102],w;
int i,j; ?/*循環(huán)變量*/
int x,y,z[999]; ?/*雷的位置*/
int t,s; ?/*標記*/
int m,n,lei; ?/*計數(shù)*/
int u,v; ?/*輸入*/
int hang,lie,ge,mo; ?/*自定義變量*/
srand((int)time(NULL)); ?/*啟動隨機數(shù)發(fā)生器*/
leb1:? /*選擇模式*/
printf("\n? ?請選擇模式:\n ??1.標準 ?2.自定義\n");
scanf("%d",mo);
if(mo==2) ?/*若選擇自定義模式,要輸入三個參數(shù)*/
{do
{t=0; printf("請輸入\n行數(shù) 列數(shù) 雷的個數(shù)\n");
scanf("%d%d%d",hang,lie,ge);
if(hang2){printf("行數(shù)太少\n"); t=1;}
if(hang100){printf("行數(shù)太多\n");t=1;}
if(lie2){printf("列數(shù)太少\n");t=1;}
if(lie100){printf("列數(shù)太多\n");t=1;}
if(ge1){printf("至少要有一個雷\n");t=1;}
if(ge=(hang*lie)){printf("雷太多了\n");t=1;}
}while(t==1);
}
else{hang=10,lie=10,ge=10;}? /*否則就是選擇了標準模式(默認參數(shù))*/
for(i=1;i=ge;i=i+1)? /*確定雷的位置*/
{do
{t=0; z[i]=rand( )%(hang*lie);
for(j=1;ji;j=j+1){if(z[i]==z[j]) t=1;}
}while(t==1);
}
for(i=0;i=hang+1;i=i+1)? /*初始化a,b,c*/
{for(j=0;j=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }
for(i=1;i=hang;i=i+1)
{for(j=1;j=lie;j=j+1) {a[i][j]='+';} }
for(i=1;i=ge;i=i+1) ?/*把雷放入c*/
{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}
for(i=1;i=hang;i=i+1)? /*計算b中數(shù)字*/
{for(j=1;j=lie;j=j+1)
{m=48;
if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;
if(c[i-1][j]=='#')m=m+1; ?if(c[i+1][j+1]=='#')m=m+1;
if(c[i][j+1]=='#')m=m+1; ?if(c[i+1][j]=='#')m=m+1;
if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;
b[i][j]=m;
}
}
for(i=1;i=ge;i=i+1) ?/*把雷放入b中*/
{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}
lei=ge; ?/*以下是游戲設計*/
do
{leb2:? /*輸出*/
system("cls");printf("\n\n\n\n");
printf(" ???");
for(i=1;i=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ?",w);
}
printf("\n ??|");
for(i=1;i=lie;i=i+1){printf("---|");}
printf("\n");
for(i=1;i=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j=lie;j=j+1)
{if(a[i][j]=='0')printf("? ?|");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷個數(shù)");
if(i==3)printf(" %d",lei);
printf("\n? ?|");
for(j=1;j=lie;j=j+1){printf("---|");}
printf("\n");
}
scanf("%d%c%d",u,w,v); ?/*輸入*/
u=u+1,v=v+1;
if(w!='#'a[u][v]=='@')
goto leb2;
if(w=='#')
{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}
else if(a[u][v]=='@'){a[u][v]='?'; lei=lei+1;}
else if(a[u][v]=='?'){a[u][v]='+';}
goto leb2;
}
a[u][v]=b[u][v];
leb3: ?/*打開0區(qū)*/
t=0;
if(a[u][v]=='0')
{for(i=1;i=hang;i=i+1)
{for(j=1;j=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; ?if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i=hang;i=i+1)
{for(j=lie;j=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;? ?if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i=1;i=i-1)
{for(j=1;j=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; ?if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i=1;i=i-1)
{for(j=lie;j=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;? if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i=hang;i=i+1) ?/*檢測0區(qū)*/
{for(j=1;j=lie;j=j+1)
{if(a[i][j]=='0')
{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;
if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1;
if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1;
if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1;
if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1;
if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1;
if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;
if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;
}
}
}
if(t==1)goto leb3;
}
n=0; ?/*檢查結束*/
for(i=1;i=hang;i=i+1)
{for(j=1;j=lie;j=j+1)
{if(a[i][j]!='+'a[i][j]!='@'a[i][j]!='?')n=n+1;}
}
}
while(a[u][v]!='#'n!=(hang*lie-ge));
for(i=1;i=ge;i=i+1) ?/*游戲結束*/
{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }
printf(" ???");
for(i=1;i=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ?",w);
}
printf("\n ??|");
for(i=1;i=lie;i=i+1){printf("---|");}
printf("\n");
for(i=1;i=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else ?printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷個數(shù)");
if(i==3)printf(" %d",lei); printf("\n? ?|");
for(j=1;j=lie;j=j+1) {printf("---|");}
printf("\n");
}
if(n==(hang*lie-ge)) printf("你成功了!\n");
else printf("??? 游戲結束!\n");
printf("??? 重玩請輸入1\n");
t=0;
scanf("%d",t);
if(t==1)goto leb1;
}
/*注:在DEV c++上運行通過。行號和列號都從0開始,比如要確定第0行第9列不是“雷”,就在0和9中間加入一個字母,可以輸入【0a9】三個字符再按回車鍵。3行7列不是雷,則輸入【3a7】回車;第8行第5列是雷,就輸入【8#5】回車,9行0列是雷則輸入【9#0】并回車*/
網(wǎng)站名稱:掃雷java完整代碼,掃雷java源碼
鏈接URL:http://chinadenli.net/article16/dsgepdg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、企業(yè)建站、標簽優(yōu)化、網(wǎng)站策劃、微信公眾號、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)