java寫的推箱子
阿新 • • 發佈:2018-12-10
javaFX寫的介面 大家可以一起探討學習
核心程式碼:
/** * 判斷小人是否可以移動 * * @param x1 小人下一步的x軸 * @param y1 小人下一步的y軸 * @param x2 小人下二步的x軸 * @param y2 小人下二步的y軸 * @return */ boolean tryMove(int x1, int y1, int x2, int y2) { if (x1 < 0 || x2 < 0 || y1 < 0 || y2 < 0) return false;//若果超出地圖的左上,不通過 //若果超出地圖的右下,不通過 if (x1 > Config.map_width || x2 > Config.map_width || y1 > Config.map_height || y2 > Config.map_height) return false; if (curMap[x1][y1] == 1) return false; //如果小人前面是牆不通過 if (curMap[x1][y1] == 3 || curMap[x1][y1] == 5) { //小人下一步是箱子 需要判斷箱子前面有沒有障礙物(箱子/牆) if (curMap[x2][y2] == 1 || curMap[x2][y2] == 3 || curMap[x2][y2] == 5) { return false; } else { //沒有障礙 小人前面的箱子前進一步 curMap[x2][y2] = 3; } } //如果都沒判斷成功小人前進一步 curMap[x1][y1] = 4;//更改地圖對應座標點的值 //移動之前的座標 int v = oriMap[manX][manY]; if (v != 2) {//若果剛開始小人位置不是球的話 if (v == 5) {//可能是5 既有箱子又有球 v = 2;//若果小人本身就在球上面的話移開之後還是顯示陷進 } else { v = 0;//小人移開之後之前小人的位置改為地板 } } //重置小人位置的地圖引數 curMap[manX][manY] = v; //小人移動 重置小人的座標 manX = x1; manY = y1; //返回true 代表小人移動了 return true; }
/** * 繪製地圖 */ public void drawMap() { Image image = Config.block;//初始圖片 double W = image.getWidth(); double H = image.getHeight(); for (int i = 0; i < curMap.length; i++) {//行 for (int j = 0; j < curMap[i].length; j++) {//列 image = Config.block;//初始圖片 //繪製地板 pen.drawImage(image, j * W, i * H); switch (curMap[i][j]) { case 1://繪製牆壁 image = Config.wall; break; case 2://繪製球 image = Config.ball; break; case 3://繪製箱子 image = Config.box; break; case 4://繪製小人 image = this.curMan; manX = i; manY = j; break; case 5://繪製箱子 image = Config.box; break; default: break; } //每個圖片不一樣寬 需要在對應地板的中心繪製地圖 pen.drawImage(image, W * j - (image.getWidth() - W) / 2, H * i - (image.getHeight() - H), image.getWidth(), image.getHeight()); } } }
執行效果圖: