JavaWeb開發實戰指南----推箱子游戲

/**
*@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,地圖   --用二維數組來表示地圖
		//地圖中有三種角色  人   箱子   目的地   (障礙物)
		//3,game start    wsad進行上下左右移動
		//4,勝利

		//定義地圖
		final int N = 10;
		int[][] map = new int[N][N];  //地圖  初值爲0
		//初始化人,箱子,目的地
		//人
		int rr = 0; //人的行數位置
		int rc = 0; //人的列數位置
		//1的值表示 人
		map[rr][rc] = 1;
		//箱子
		int xr = 3; //箱子的行數位置
		int xc = 5; //箱子的列數位置
		//2來表示 箱子
		map[xr][xc] = 2;
		//目的地
		int mr = 8; //目的地的行數位置
		int mc = 8; //目的地的列數位置
		//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("遊戲規則:把箱子推到目的地就算勝利");
			System.out.println("遊戲按鍵:上移(w),下移(s),右移(d),左移(a)");
			System.out.println("*****************************************************");
			//解決人經過目的地以後,目的地不見了
			//重新給目的地位置賦值
			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("恭喜您,順利通關!!!");
				break;
			}
			
			//開始遊戲
			//通過wsad四個鍵來進行上下左右移動
			System.out.println("請問要向哪走:");
			Scanner sc = new Scanner(System.in);
			String key = sc.next();
			//根據用戶輸入來進行移動
			//暫不考慮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
						沒有箱子的情況  人已經到了最右邊,rc+1 ==N
		比如左移,如果箱子到了最左邊, xc-1 <0,即等於0時,不讓推
						沒有箱子的情況,人已經到了最左邊,rc==0  rc-1<0
		
		擴展:
			1>擴展出障礙物 “■”表示
			2>讓這個遊戲有多個關卡
				如果勝利,可以問詢一下是否繼續,也可以直接進入一關
				2.1地圖的問題,可以找方法在下一關,重置地圖
				2.2地圖的問題,擴展使用三維數組
			3>做一個提示,路徑標識
		*/
	}
}

 

更多知識,盡在公衆號:qghktit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章