java實(shí)現(xiàn)連連看游戲

本文實(shí)例為大家分享了java實(shí)現(xiàn)連連看游戲的具體代碼,供大家參考,具體內(nèi)容如下

在蒙陰等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,蒙陰網(wǎng)站建設(shè)費(fèi)用合理。

代碼會(huì)實(shí)現(xiàn)共享的,這個(gè)是截圖

java實(shí)現(xiàn)連連看游戲

代碼:

package com.lr.bean;
import java.util.Scanner;
import java.util.Random;
import com.lr.bean.Point;
 
public class Link{
 public static void main(String[] args){
 Scanner sc=new Scanner(System.in);
 System.out.println("==========================");
 System.out.println("\t\t連連看小游戲");
 System.out.println("\t\t版權(quán):lr");
 System.out.println("==========================");
 
 System.out.println("請(qǐng)先輸入圖片數(shù)量(難度系數(shù) 1~9):");
 int picnum=sc.nextInt();
 
 System.out.println("請(qǐng)輸入棋盤的行數(shù):");
 int rows=sc.nextInt();
 
 int cols=0; //列數(shù)
 int count=0; //計(jì)數(shù)器
 do{
 if (count>0){
 System.out.println("輸入有誤,列數(shù)必須大于0!");
 }
 System.out.println("請(qǐng)輸入棋盤列數(shù):");
 cols=sc.nextInt();
 count++;
 }while( cols<1 || cols%2!=0);
 //創(chuàng)建二維數(shù)組,生成棋盤,列數(shù)+2的原因:做出邊框的效果 數(shù)組剛剛生成時(shí),每個(gè)元素都是0
 int[][] chessboard=new int[ rows+2 ][ cols+2];
 
 //隨機(jī)生成的圖片數(shù)值存入這個(gè)二維數(shù)組中,注意:邊框不存值,任為0
 initBoard( chessboard ,picnum);
 System.out.println("初始化后的棋盤為:");
 showBoard2( chessboard);
 //打亂棋盤
 shuffle( chessboard );
 //輸出
 System.out.println("打亂后的棋盤為:");
 showBoard2( chessboard);
 
 //實(shí)現(xiàn)消除業(yè)務(wù)
 // 1.定義兩個(gè)Point對(duì)象
 Point p1=new Point();
 Point p2=new Point();
 // 2.游戲狀態(tài) isGameOver
 boolean isGameOver=false;
 do{
 // 3.循環(huán)輸入兩個(gè)點(diǎn) do...while
 System.out.println("請(qǐng)輸入兩個(gè)點(diǎn)的坐標(biāo)");
 p1.x=sc.nextInt();
 p1.y=sc.nextInt();
 p2.x=sc.nextInt();
 p2.y=sc.nextInt();
 // 4.判斷這兩個(gè)數(shù)是否可以消除
 if( isErazeOk( chessboard,p1,p2)){
 //如果可以消除,將這兩個(gè)點(diǎn)在chessboard 中的值都設(shè)為0
 chessboard[p1.x][p1.y]=0;
 chessboard[p2.x][p2.y]=0;
 if( checkGameOver( chessboard )){
 isGameOver=true;
 }
 }
 //顯示消除后的棋盤
 showBoard2( chessboard );
 }while( !isGameOver );
 System.out.println("游戲結(jié)束!");
 }
 
 //判斷是否能消除的業(yè)務(wù)
 public static boolean isErazeOk(int[][] chessboard ,Point p1,Point p2){
 // 1.兩個(gè)點(diǎn)不是同一個(gè)
 if( p1.equals( p2) ){
 System.out.println("輸入的兩個(gè)點(diǎn)位置不能相同!");
 }
 // 2。兩個(gè)點(diǎn)的值是否相等
 if(chessboard[p1.x][p1.y] !=chessboard[p2.x][p2.y]){
 System.out.println("輸入的兩個(gè)點(diǎn)值不相同!請(qǐng)重新輸入");
 return false;
 }
 // 3.判斷兩個(gè)點(diǎn)的連線情況
 if( doOneLine(chessboard,p1,p2) || doTwoLine(chessboard,p1,p2) || doThreeLine(chessboard,p1,p2)){
 return true;
 }
 return false;
 }
 
 // 1連線
 public static boolean doOneLine(int[][] chessboard,Point p1,Point p2){
 //定義最大值和最小值
 int max=0;
 int min=0;
 //判斷是循環(huán)行還是循環(huán)列
 if( p1.x==p2.x){
 //找y的最大值、找y的最小值、循環(huán)從 min+1 至 max-1、判斷是否為0、如果中間有一個(gè)不為0,則返回 false
 max=p1.y>p2.y?p1.y:p2.y;
 min=p1.y<p2.y?p1.y:p2.y;
 for(int i=min+1;i<max;i++){
 if(chessboard[p1.x][i]!=0){
 return false;
 }
 }
 return true;
 }else if( p1.y==p2.y){
 //找x的最大值、找x的最小值、循環(huán)從 min+1 至 max-1、判斷是否為0、如果中間有一個(gè)不為0,則返回 false
 max=p1.x>p2.x?p1.x:p2.x;
 min=p1.x<p2.x?p1.x:p2.x;
 for(int i=min+1;i<max;i++){
 if(chessboard[i][p1.y]!=0){
 return false;
 }
 }
 return true;
 }
 return false;
 }
 
 // 2連線
 public static boolean doTwoLine(int[][] chessboard,Point p1,Point p2){
 //定義兩個(gè)臨時(shí)點(diǎn)
 Point t1=new Point();
 t1.x=p1.x;
 t1.y=p2.y;
 
 Point t2=new Point();
 t2.x=p2.x;
 t2.y=p1.y;
 
 if( chessboard[t1.x][t1.y]==0 && doOneLine(chessboard, p1,t1 ) && doOneLine(chessboard, t1,p2) ){
 return true;
 }
 if( chessboard[t2.x][t2.y]==0 && doOneLine(chessboard, p1,t2 ) && doOneLine(chessboard, t2,p2) ){
 return true;
 }
 return false;
 }
 
 // 3連線
 public static boolean doThreeLine(int[][] chessboard,Point p1,Point p2){
 //先循環(huán)行 :x
 for( int i=0;i<chessboard.length;i++){
 Point t=new Point();
 t.x=i;
 t.y=p1.y;
 if( chessboard[t.x][t.y]==0 && doOneLine(chessboard,t, p1) && doTwoLine(chessboard, t,p2) ){
 return true;
 }
 }
 //再循環(huán)列 :y
 for( int i=0;i<chessboard.length;i++){
 Point t=new Point();
 t.x=p1.x;
 t.y=i;
 if( chessboard[t.x][t.y]==0 && doOneLine(chessboard,t, p1) && doTwoLine(chessboard, t,p2) ){
 return true;
 }
 }
 return false;
 }
 
 //判斷游戲是否結(jié)束:循環(huán)這個(gè)數(shù)組,判斷所有的位置都為0
 public static boolean checkGameOver(int[][] chessboard){
 for(int i=1;i<chessboard.length-1;i++){
 for(int j=1;i<chessboard[i].length-1;j++){
 if( chessboard[i][j]!=0 ){
 return false;
 }
 }
 }
 return true;
 }
 
 
 public static void initBoard(int[][] chessboard,int picnum){
 Random r=new Random();
 for( int i=1;i<chessboard.length-1;i++){
 for(int j=1;j<chessboard[i].length-1;j=j+2){
 int pic=r.nextInt( picnum )+1;
 chessboard[i][j]=pic;
 chessboard[i][j+1]=pic;
 }
 }
 }
 
 //打亂棋盤,只能對(duì)中間的值打亂,而不能打擾邊框
 //交換數(shù)組的兩個(gè)值 ,隨機(jī)生成的四個(gè)下標(biāo),每個(gè)下標(biāo)表示一個(gè)數(shù) x1,y1 x2,y2 =》 chessboard【x2】【y1】 將上面兩個(gè)數(shù)交換
 //概率:棋盤越大,交換越多
 public static void shuffle(int[][] chessboard ){
 Random r=new Random();
 int x1=0;
 int y1=0;
 int x2=0;
 int y2=0;
 int temp=0;
 for(int i=0;i<chessboard.length*chessboard[0].length*10;i++){
 //生成的四個(gè)下標(biāo),不能為0,也不能為 length-1
 x1=r.nextInt( chessboard.length-2 )+1;
 y1=r.nextInt( chessboard[0].length-2 )+1;
 x2=r.nextInt( chessboard.length-2 )+1;
 y2=r.nextInt( chessboard[0].length-2 )+1;
 //完成交換
 temp=chessboard[x1][y1];
 chessboard[x1][y1]=chessboard[x2][y2];
 chessboard[x2][y2]=temp;
 }
 }
 //簡(jiǎn)單的輸出
 public static void showBoard(int[][] chessboard){
 for(int i=0;i<chessboard.length;i++){
 for(int j=0;j<chessboard[i].length;j++){
 System.out.print(chessboard[i][j]+"\t");
 }
 System.out.println();
 }
 }
 
 //私有方法:專門用來(lái)輸出棋盤最上面和最下面要出現(xiàn)的列號(hào)
 private static void showColsNum( int[][] chessboard ){
 for(int i=0;i<chessboard[0].length;i++){
 if( i==0 || i==chessboard[i].length-1){
 System.out.print("\t");
 }else{
 System.out.print("*"+i+"\t");
 }
 }
 System.out.println();
 
 
 }
 
 //帶行列提示的輸出
 public static void showBoard2( int[][] chessboard){
 showColsNum( chessboard );//輸出error:列號(hào)
 //中間完成棋盤
 for(int i=0;i<chessboard.length;i++ ){
 //加入前面行號(hào)的輸出
 if( i==0 || i==chessboard[i].length-1){
 System.out.print(" ");
 }else{
 System.out.print(""+i);
 }
 for(int j=0;j<chessboard[i].length;j++){
 //邊框要用 * 來(lái)修飾
 if( i==0 || j==0 || i==chessboard.length-1 || j==chessboard[i].length-1){
 if( j==chessboard[i].length-1){
 System.out.print(" # ");
 }else{
 System.out.print(" #\t");
 }
 }else{//不是邊框,就輸出數(shù)組中對(duì)應(yīng)的數(shù)字
 if( chessboard[i][j]==0){
 System.out.print(" \t");
 }else{
 System.out.print(" "+chessboard[i][j]+"\t");
 }
 }
 }
 //加入后面的行號(hào)
 if( i==0 || i==chessboard.length-1){
 System.out.print(" ");
 }else{
 System.out.print(""+i);
 }
 System.out.println();
 }
 showColsNum( chessboard );//輸出列號(hào)
 
 }
 
}

Point類沒(méi)有寫出來(lái)了,比較簡(jiǎn)單,里面就存了兩個(gè)數(shù)據(jù),表示數(shù)字的行和列,就不上圖了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

文章題目:java實(shí)現(xiàn)連連看游戲
文章起源:http://muchs.cn/article42/ihdehc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、定制網(wǎng)站、網(wǎng)站排名ChatGPT、網(wǎng)站設(shè)計(jì)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名