●
●
●
●
《最受歡迎的精準提升平臺》
/**
*@Title: ${filename}
*@Package: ${package_name}
*@Description: ${todo}
*推箱子
*
*@author: 源代碼資料盡在"清哥好課堂"公眾號:qghktit
*@date: ${date}${time}
*@version: 1.0
*/
import java.util.Scanner;
public class PushBox
{
public static void main(String[] args)
{
//1,有一個游戲的簡單介紹
//2,地圖 --用二維數(shù)組來表示地圖
//地圖中有三種角色 人 箱子 目的地 (障礙物)
//3,game start wsad進行上下左右移動
//4,勝利
//定義地圖
final int N = 10;
int[][] map = new int[N][N]; //地圖 初值為0
//初始化人,箱子,目的地
//人
int rr = 0; //人的行數(shù)位置
int rc = 0; //人的列數(shù)位置
//1的值表示 人
map[rr][rc] = 1;
//箱子
int xr = 3; //箱子的行數(shù)位置
int xc = 5; //箱子的列數(shù)位置
//2來表示 箱子
map[xr][xc] = 2;
//目的地
int mr = 8; //目的地的行數(shù)位置
int mc = 8; //目的地的列數(shù)位置
//3來表示目的地
map[mr][mc] = 3;
while (true) //游戲,標配
{
//清屏
try
{
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
}
catch (Exception ex)
{
System.out.println("error");
}
//打印游戲簡介
System.out.println("*****************************************************");
System.out.println("\t\t推箱子游戲簡單版");
System.out.println("游戲簡介:囚代表人,▲代表箱子,☆代表目的地");
System.out.println("游戲規(guī)則:把箱子推到目的地就算勝利");
System.out.println("游戲按鍵:上移(w),下移(s),右移(d),左移(a)");
System.out.println("*****************************************************");
//解決人經(jīng)過目的地以后,目的地不見了
//重新給目的地位置賦值
map[mr][mc] = 3;
//打印地圖
for (int r=0; r<N; r++)
{
for (int c=0; c<N; c++)
{
//System.out.print(map[r][c]);
switch (map[r][c])
{
case 1: // 人
System.out.print("囚");
break;
case 2: // 箱子
System.out.print("▲");
break;
case 3: // 目的地
System.out.print("☆");
break;
default: //地圖
System.out.print("□");
break;
}
}
System.out.println("");
}
//判斷是否勝利
//判斷 箱子和目的地的位置是否重合
if (xr==mr && xc==mc)
{
System.out.println("恭喜您,順利通關(guān)!?。?);
break;
}
//開始游戲
//通過wsad四個鍵來進行上下左右移動
System.out.println("請問要向哪走:");
Scanner sc = new Scanner(System.in);
String key = sc.next();
//根據(jù)用戶輸入來進行移動
//暫不考慮wsda以外輸入
if ("w".equals(key)) //上移
{
System.out.println("上移");
if (map[rr-1][rc] == 2) //前上方是否有箱子
{
xr--;
map[xr][xc] = 2;
}
//人走
map[rr][rc] = 0;
rr--;
map[rr][rc] = 1;
}
else if ("s".equals(key)) //下移
{
System.out.println("下移");
if (map[rr+1][rc] == 2) //前下方有箱子
{
//箱子先走
xr++;
map[xr][xc] = 2;
//人后走
}
// else
// {
//人所在的位置變成空地
map[rr][rc] = 0;
//下一個位置變成人的位置
rr++;
map[rr][rc] = 1;
// }
}
else if ("a".equals(key)) //左移
{
System.out.println("左移");
if (map[rr][rc-1] == 2) //如果左前方有箱子
{
xc--;
map[xr][xc] = 2;
}
//走人
map[rr][rc] = 0;
rc--;
map[rr][rc] = 1;
}
else if ("d".equals(key)) //右移
{
System.out.println("右移");
if (map[rr][rc+1] == 2) //如果右前方有箱子
{
xc++;
map[xr][xc] = 2;
}
//人走
map[rr][rc] = 0;
rc++;
map[rr][rc] = 1;
}
}
/*
要解決的問題,邊界問題 上下左右
思想:
如果前面有箱子,是不是要判斷箱子的下一個位置是不是到了邊界
比如右移,如果箱子到了最右邊,xc+1==N rc+1+1 ==N
沒有箱子的情況 人已經(jīng)到了最右邊,rc+1 ==N
比如左移,如果箱子到了最左邊, xc-1 <0,即等于0時,不讓推
沒有箱子的情況,人已經(jīng)到了最左邊,rc==0 rc-1<0
擴展:
1>擴展出障礙物 “■”表示
2>讓這個游戲有多個關(guān)卡
如果勝利,可以問詢一下是否繼續(xù),也可以直接進入一關(guān)
2.1地圖的問題,可以找方法在下一關(guān),重置地圖
2.2地圖的問題,擴展使用三維數(shù)組
3>做一個提示,路徑標識
*/
}
}
清哥好課堂公眾號
微信號 : qghktit
新浪微博:清哥好課堂