日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

是男人就下100层(小游戏)

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 是男人就下100层(小游戏) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
復制代碼1 package com.tarena.downwell;2 3 import java.awt.image.BufferedImage;4 /**5 * 所有臺階的父類(包括頂部的刺)6 * @author Misaki7 *8 */9 public class Board { 10 protected int x;//橫坐標 11 protected int y;//縱坐標 12 protected BufferedImage image;//圖片 13 protected int width;//圖片寬度 14 protected int height;//圖片高度 15 /* 16 * 下面都是用elipse生成的get/set方法 17 */ 18 public int getX() { 19 return x; 20 } 21 public void setX(int x) { 22 this.x = x; 23 } 24 public int getY() { 25 return y; 26 } 27 public void setY(int y) { 28 this.y = y; 29 } 30 public BufferedImage getImage() { 31 return image; 32 } 33 public void setImage(BufferedImage image) { 34 this.image = image; 35 } 36 public int getWidth() { 37 return width; 38 } 39 public void setWidth(int width) { 40 this.width = width; 41 } 42 public int getHeight() { 43 return height; 44 } 45 public void setHeight(int height) { 46 this.height = height; 47 } 48 49 } 復制代碼復制代碼 package com.tarena.downwell;import java.util.Random; /*** 彈簧臺階* @author Misaki**/ public class BoardFlip extends Board implements MoveObject,Function{private int index = 0;//播放動畫時用來控制圖片數組下標private boolean flag = true;//true就是沒被踩過,踩過就falsepublic boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}public BoardFlip(){//構造Random rnd = new Random();this.image = Game.board_e[0];//圖片設為圖片數組中第一個圖this.width = this.image.getWidth();//圖片寬度this.height = this.image.getHeight();//圖片高度this.x = rnd.nextInt(Game.WIDTH-this.width-10);//橫坐標在游戲框范圍類隨機this.y = Game.HEIGHT;//縱坐標為窗體的高度(正好在窗體之外)}@Overridepublic void move() {this.y -= ySpeed;}/*** 這個方法每個功能性方塊都差不多,只解釋一次*/public void flash(){if(this.index==6){//如果圖片播放到最后一個this.image = Game.board_e[0];//重新把圖片設為開始的圖片this.index = 0;//重置indexthis.flag = true;//臺階改為正常(沒被踩過,總不能踩一次鬼畜一天吧)}else{//如果圖片還沒播放完this.image = Game.board_e[++this.index];//播放下一個圖片}}/*** 執行功能*/@Overridepublic void function(Javaman man) {man.flipSpeed = -5;//給個向上的速度this.flag = false;//說明這個方塊被踩了,執行動畫,動畫完了再改回true} } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.util.Random;4 /**5 * 傳送帶(往左)6 * @author Misaki7 *8 */9 public class BoardMoveL extends Board implements MoveObject,Function{ 10 private int index = 0; 11 12 public BoardMoveL(){//見BoradFlip 13 Random rnd = new Random(); 14 this.image = Game.board_b[0]; 15 this.width = this.image.getWidth(); 16 this.height = this.image.getHeight(); 17 this.x = rnd.nextInt(Game.WIDTH-this.width-10); 18 this.y = Game.HEIGHT; 19 } 20 @Override 21 public void move() {//傳送帶的動畫是從頭播放到尾的,就讓它隨著臺階向上移動一起動吧 22 if(this.index==3){//這個跟BoradFlip里flash結構一樣 23 this.image = Game.board_b[0]; 24 this.index = 0; 25 }else{ 26 this.image = Game.board_b[++this.index]; 27 } 28 this.y -= ySpeed; 29 } 30 /** 31 * 給個往左的速度,區分與按鍵盤給的速度,最后疊加 32 */ 33 @Override 34 public void function(Javaman man) { 35 man.moveSpeed = -1; 36 } 37 //下面的都用不到,只是實現接口必須重寫。(好吧我設計也有點問題) 38 @Override 39 public void flash() { 40 41 } 42 @Override 43 public boolean isFlag() { 44 return false; 45 } 46 @Override 47 public void setFlag(boolean flag) { 48 49 } 50 51 } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.util.Random;4 /**5 * 傳送帶(往右)6 * @author Misaki7 *8 */9 public class BoardMoveR extends Board implements MoveObject,Function{ 10 private int index = 0; 11 12 public BoardMoveR(){//見BoradFlip 13 Random rnd = new Random(); 14 this.image = Game.board_c[0]; 15 this.width = this.image.getWidth(); 16 this.height = this.image.getHeight(); 17 this.x = rnd.nextInt(Game.WIDTH-this.width-10); 18 this.y = Game.HEIGHT; 19 } 20 @Override 21 public void move() {//見BoardMoveL 22 if(this.index==3){ 23 this.image = Game.board_c[0]; 24 this.index = 0; 25 }else{ 26 this.image = Game.board_c[++this.index]; 27 } 28 this.y -= ySpeed; 29 } 30 @Override 31 public void function(Javaman man) {//見BoardMoveL 32 man.moveSpeed = 1; 33 } 34 @Override 35 public void flash() { 36 // TODO Auto-generated method stub 37 38 } 39 @Override 40 public boolean isFlag() { 41 // TODO Auto-generated method stub 42 return false; 43 } 44 @Override 45 public void setFlag(boolean flag) { 46 // TODO Auto-generated method stub 47 48 } 49 } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.util.Random;4 /**5 * 釘子臺階6 * @author Misaki7 *8 */9 public class BoardNail extends Board implements MoveObject,Function{ 10 private boolean flag = true; 11 public BoardNail(){//見BoradFlip 12 Random rnd = new Random(); 13 this.image = Game.board_f; 14 this.width = this.image.getWidth(); 15 this.height = this.image.getHeight(); 16 this.x = rnd.nextInt(Game.WIDTH-this.width-10); 17 this.y = Game.HEIGHT; 18 } 19 20 @Override 21 public void move() { 22 this.y -= ySpeed; 23 } 24 25 @Override 26 public void function(Javaman man) { 27 if(flag){//如果沒被踩過 28 man.subLife();//減命 29 flag = false;//改為踩過 30 } 31 } 32 33 @Override 34 public void flash() { 35 // TODO Auto-generated method stub 36 37 } 38 39 @Override 40 public boolean isFlag() { 41 // TODO Auto-generated method stub 42 return false; 43 } 44 45 @Override 46 public void setFlag(boolean flag) { 47 // TODO Auto-generated method stub 48 49 } 50 } 復制代碼復制代碼 package com.tarena.downwell;import java.util.Random; /*** 普通臺階* @author Misaki**/ public class BoardNormal extends Board implements MoveObject{public BoardNormal(){//見BoradFlipRandom rnd = new Random();this.image = Game.board_a;this.width = this.image.getWidth();this.height = this.image.getHeight();this.x = rnd.nextInt(Game.WIDTH-this.width-10);this.y = Game.HEIGHT;}/*** 隨機產生一個普通方塊,只是為了init()* @return*/public static BoardNormal randomOne(){BoardNormal b = new BoardNormal();Random rnd = new Random();b.y -= rnd.nextInt(800);//設為800是讓它一開始就在游戲框里return b;}@Overridepublic void move() {this.y -= ySpeed;} } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.util.Random;4 import java.util.Timer;5 import java.util.TimerTask;6 /**7 * 易碎臺階(踩上去過一會就掉下去)8 * @author Misaki9 * @version 1.1 10 */ 11 public class BoardOnce extends Board implements MoveObject,Function{ 12 private int index = 0; 13 private boolean flag = true; 14 15 16 public boolean isFlag() { 17 return flag; 18 } 19 public void setFlag(boolean flag) { 20 this.flag = flag; 21 } 22 public BoardOnce(){//見BoradFlip 23 Random rnd = new Random(); 24 this.image = Game.board_d[0]; 25 this.width = this.image.getWidth(); 26 this.height = this.image.getHeight(); 27 this.x = rnd.nextInt(Game.WIDTH-this.width-10); 28 this.y = Game.HEIGHT; 29 } 30 @Override 31 public void move() { 32 this.y -= ySpeed; 33 } 34 public void flash(){ 35 if(this.index==5){ 36 this.image = Game.board_d[0]; 37 this.index = 0; 38 this.flag = true; 39 }else{ 40 this.image = Game.board_d[++this.index]; 41 } 42 } 43 @Override 44 public void function(Javaman man) { 45 Timer timer = new Timer(); 46 timer.schedule(new TimerTask(){ 47 48 @Override 49 public void run() { 50 man.setY(y+height);//200ms后讓小人穿過去 51 flag = false;//臺階改為沒被踩過 52 } 53 54 }, 200);//只有兩個參數的重載。200毫秒后執行run(),只執行一次哦! 55 } 56 } 復制代碼復制代碼1 package com.tarena.downwell;2 /**3 * 功能性臺階接口(彈起來,傳送帶轉起來,刺死你,穿過去)4 * @author Misaki5 *6 */7 public interface Function {8 void function(Javaman man);//執行功能9 void flash();//播放專屬動畫 10 /* 11 * 關于Flag的get/set 12 * Flag判斷這個方塊功能被沒被執行,或者能不能執行 13 */ 14 boolean isFlag(); 15 void setFlag(boolean flag); 16 } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.awt.image.BufferedImage;4 /**5 * 小人類6 * @author Misaki7 *8 */9 public class Javaman {10 private int x;//橫坐標11 private int y;//縱坐標12 private BufferedImage image;//圖片13 private int index = 0;//用于切換圖片,形成動畫14 private int width;//圖片寬15 private int height;//圖片高16 private int ySpeed;//縱向速度17 private int xSpeed;//橫向速度18 public int flipSpeed = 0;//彈簧臺階提供的向上速度19 public int moveSpeed = 0;//傳送帶提供的橫向速度20 private boolean isManOnFloor;//是否在臺階上21 private int life = 12;//生命22 23 public Javaman(int x, int y) {24 super();25 this.x = x;26 this.y = y;27 this.image = Game.javaman_s;28 this.width = this.image.getWidth();29 this.height = this.image.getHeight();30 this.xSpeed = 0;31 this.ySpeed = 2;32 }33 34 public void subLife(){//生命減一35 life--;36 }37 38 public void die(){//死亡39 life = 0;40 }41 42 public void addLife(){43 this.life++;44 }45 46 public int getLife(){47 return life;48 }49 50 public void move(){//橫向移動51 this.image = Game.javaman_s;//默認情況設為沒有移動的圖片52 if(this.x>10 && this.x+this.width<Game.WIDTH-20){//如果在游戲框中間53 if(xSpeed>0){//如果往右移54 if(isManOnFloor){//如果在臺階上往右移55 /*56 * 播放臺階上右移的動畫57 */58 this.image = Game.javaman_r[index++];59 if(index>2){60 index = 0;61 }62 }else{//在空中63 /*64 * 播放空中右移的動畫65 */66 this.image = Game.javaman_rd[index++];67 if(index>2){68 index = 0;69 }70 }71 }else if(xSpeed<0){//如果往左移72 if(isManOnFloor){//如果在臺階上往左移73 /*74 * 播放臺階上左移的動畫75 */76 this.image = Game.javaman_l[index++];77 if(index>2){78 index = 0;79 }80 }else{//在空中81 /*82 * 播放空中左移的動畫83 */84 this.image = Game.javaman_ld[index++];85 if(index>2){86 index = 0;87 }88 }89 }90 this.x += xSpeed+moveSpeed;//鍵盤監聽提供速度+傳送帶提供速度91 }else if(this.x<=10){//在畫面最左端92 this.x++;//彈回來!93 }else {//畫面最右端94 this.x--;//彈回來!95 }96 }97 int flipFlag = 0;//控制被彈起來的情況下,向上速度減小的頻率,快了彈得太低,慢了彈到頂了98 public void drop(){99 if(flipSpeed!=0){//如果被彈起來 100 flipFlag++; 101 if(this.y>45){//如果沒到頂 102 this.y += flipSpeed;//那就勇敢的上! 103 }else{//到頂了。。 104 flipSpeed = 0;//別上了,乖乖下去 105 // life--;//到頂了難道不減血?(注釋原因為后來游戲主類寫了判斷減血的方法) 106 } 107 if(flipFlag%15==0){//到時間減速了,你想上天啊? 108 flipSpeed++;//負的數加加不就是減速嗎? 109 } 110 }else{//沒被彈起來 111 this.y += ySpeed;//正常下落吧。 112 } 113 } 114 115 public boolean isManOnFloor() { 116 return isManOnFloor; 117 } 118 119 public void setManOnFloor(boolean isManOnFloor) { 120 this.isManOnFloor = isManOnFloor; 121 } 122 123 public BufferedImage getImage() { 124 return image; 125 } 126 127 public void setImage(BufferedImage image) { 128 this.image = image; 129 } 130 131 public int getX() { 132 return x; 133 } 134 135 public void setX(int x) { 136 this.x = x; 137 } 138 139 public int getY() { 140 return y; 141 } 142 143 public void setY(int y) { 144 this.y = y; 145 } 146 147 public int getWidth() { 148 return width; 149 } 150 151 public void setWidth(int width) { 152 this.width = width; 153 } 154 155 public int getHeight() { 156 return height; 157 } 158 159 public void setHeight(int height) { 160 this.height = height; 161 } 162 163 public int getySpeed() { 164 return ySpeed; 165 } 166 167 public void setySpeed(int ySpeed) { 168 this.ySpeed = ySpeed; 169 } 170 171 public int getxSpeed() { 172 return xSpeed; 173 } 174 175 public void setxSpeed(int xSpeed) { 176 this.xSpeed = xSpeed; 177 } 178 179 180 } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.awt.Color;4 import java.awt.Font;5 import java.awt.Graphics;6 import java.awt.event.KeyAdapter;7 import java.awt.event.KeyEvent;8 import java.awt.image.BufferedImage;9 import java.io.IOException;10 import java.util.ArrayList;11 import java.util.Iterator;12 import java.util.List;13 import java.util.Random;14 import java.util.Timer;15 import java.util.TimerTask;16 17 import javax.imageio.ImageIO;18 import javax.swing.JFrame;19 import javax.swing.JPanel;20 21 /**22 * 游戲的主類23 * @author Misaki24 * @version 3.225 * 1.將MoveObject里的常量改為負數。26 * 2.火箭速度增大,且現在火箭根據當時小人的橫坐標來生成27 * 3.彈簧臺階現在不會連續彈起小人,即小人只有掉下來踩到臺階才會觸發彈簧28 * 4.加入游戲結束畫面,游戲結束時會用圖片顯示下了多少層。29 */30 public class Game extends JPanel{31 public static final int WIDTH = 500;//窗體寬度32 public static final int HEIGHT = 900;//窗體高度33 public static final int RUNNING = 0;//游戲運行34 public static final int PAUSE = 1;//游戲暫停35 public static final int START = 2;//游戲開始36 public static final int GAME_OVER = 3;//游戲結束37 38 private Timer timer;//定時器39 private int intervel = 10;//定時器間隔40 private Random rnd = new Random();//產生隨機數41 private int score = 0;//分數,即下了多少層,由于臺階上升速度一定,可以按時間增長42 private int state = START;//游戲狀態,默認為運行43 private int level = 0;44 45 private BoardTop boardtop = new BoardTop();//頂部尖刺46 private Javaman man;//小人47 private List<Board> boards = new ArrayList<Board>();//臺階集合48 private List<Apple> apples = new ArrayList<Apple>();//蘋果集合49 private List<Monster> monsters = new ArrayList<Monster>();//怪物集合50 private List<Rocket> rockets = new ArrayList<Rocket>();//火箭集合51 /** 靜態圖片 */52 public static BufferedImage background;53 public static BufferedImage pause;54 public static BufferedImage start;55 public static BufferedImage gameover;56 57 public static BufferedImage[] num = new BufferedImage[10];58 59 public static BufferedImage apple;60 public static BufferedImage monster;61 public static BufferedImage rocket;62 63 public static BufferedImage board_top;64 public static BufferedImage board_a;65 public static BufferedImage[] board_b = new BufferedImage[4];66 public static BufferedImage[] board_c = new BufferedImage[4];67 public static BufferedImage[] board_d = new BufferedImage[6];68 public static BufferedImage[] board_e = new BufferedImage[7];69 public static BufferedImage board_f;70 71 public static BufferedImage[] javaman_c = new BufferedImage[3];72 public static BufferedImage[] javaman_l = new BufferedImage[3];73 public static BufferedImage[] javaman_ld = new BufferedImage[3];74 public static BufferedImage[] javaman_r = new BufferedImage[3];75 public static BufferedImage[] javaman_rd = new BufferedImage[3];76 public static BufferedImage javaman_s;77 /** 靜態塊,加載所有圖片 */78 static{79 try {80 background = ImageIO.read(Game.class.getResource("background.gif"));81 start = ImageIO.read(Game.class.getResource("start.gif"));82 pause = ImageIO.read(Game.class.getResource("pause.png"));83 gameover = ImageIO.read(Game.class.getResource("gameover.gif"));84 85 board_top = ImageIO.read(Game.class.getResource("board/board_top.gif"));86 board_a = ImageIO.read(Game.class.getResource("board/board_a.gif"));87 apple = ImageIO.read(Game.class.getResource("apple.png"));88 monster = ImageIO.read(Game.class.getResource("monster.png"));89 rocket = ImageIO.read(Game.class.getResource("rocket.png"));90 91 num[0] = ImageIO.read(Game.class.getResource("num/number_0.gif"));92 num[1] = ImageIO.read(Game.class.getResource("num/number_1.gif"));93 num[2] = ImageIO.read(Game.class.getResource("num/number_2.gif"));94 num[3] = ImageIO.read(Game.class.getResource("num/number_3.gif"));95 num[4] = ImageIO.read(Game.class.getResource("num/number_4.gif"));96 num[5] = ImageIO.read(Game.class.getResource("num/number_5.gif"));97 num[6] = ImageIO.read(Game.class.getResource("num/number_6.gif"));98 num[7] = ImageIO.read(Game.class.getResource("num/number_7.gif"));99 num[8] = ImageIO.read(Game.class.getResource("num/number_8.gif")); 100 num[9] = ImageIO.read(Game.class.getResource("num/number_9.gif")); 101 102 103 board_b[0] = ImageIO.read(Game.class.getResource("board/board_b1.gif")); 104 board_b[1] = ImageIO.read(Game.class.getResource("board/board_b2.gif")); 105 board_b[2] = ImageIO.read(Game.class.getResource("board/board_b3.gif")); 106 board_b[3] = ImageIO.read(Game.class.getResource("board/board_b4.gif")); 107 108 board_c[0] = ImageIO.read(Game.class.getResource("board/board_c1.gif")); 109 board_c[1] = ImageIO.read(Game.class.getResource("board/board_c2.gif")); 110 board_c[2] = ImageIO.read(Game.class.getResource("board/board_c3.gif")); 111 board_c[3] = ImageIO.read(Game.class.getResource("board/board_c4.gif")); 112 113 board_d[0] = ImageIO.read(Game.class.getResource("board/board_d1.gif")); 114 board_d[1] = ImageIO.read(Game.class.getResource("board/board_d2.gif")); 115 board_d[2] = ImageIO.read(Game.class.getResource("board/board_d3.gif")); 116 board_d[3] = ImageIO.read(Game.class.getResource("board/board_d4.gif")); 117 board_d[4] = ImageIO.read(Game.class.getResource("board/board_d5.gif")); 118 board_d[5] = ImageIO.read(Game.class.getResource("board/board_d6.gif")); 119 120 board_e[0] = ImageIO.read(Game.class.getResource("board/board_e1.gif")); 121 board_e[1] = ImageIO.read(Game.class.getResource("board/board_e2.gif")); 122 board_e[2] = ImageIO.read(Game.class.getResource("board/board_e3.gif")); 123 board_e[3] = ImageIO.read(Game.class.getResource("board/board_e4.gif")); 124 board_e[4] = ImageIO.read(Game.class.getResource("board/board_e5.gif")); 125 board_e[5] = ImageIO.read(Game.class.getResource("board/board_e6.gif")); 126 board_e[6] = ImageIO.read(Game.class.getResource("board/board_e7.gif")); 127 128 board_f = ImageIO.read(Game.class.getResource("board/board_f.gif")); 129 130 javaman_c[0] = ImageIO.read(Game.class.getResource("man/javaman_c1.gif")); 131 javaman_c[1] = ImageIO.read(Game.class.getResource("man/javaman_c2.gif")); 132 javaman_c[2] = ImageIO.read(Game.class.getResource("man/javaman_c3.gif")); 133 134 javaman_l[0] = ImageIO.read(Game.class.getResource("man/javaman_l1.gif")); 135 javaman_l[1] = ImageIO.read(Game.class.getResource("man/javaman_l2.gif")); 136 javaman_l[2] = ImageIO.read(Game.class.getResource("man/javaman_l3.gif")); 137 138 javaman_ld[0] = ImageIO.read(Game.class.getResource("man/javaman_ld1.gif")); 139 javaman_ld[1] = ImageIO.read(Game.class.getResource("man/javaman_ld2.gif")); 140 javaman_ld[2] = ImageIO.read(Game.class.getResource("man/javaman_ld3.gif")); 141 142 javaman_r[0] = ImageIO.read(Game.class.getResource("man/javaman_r1.gif")); 143 javaman_r[1] = ImageIO.read(Game.class.getResource("man/javaman_r2.gif")); 144 javaman_r[2] = ImageIO.read(Game.class.getResource("man/javaman_r3.gif")); 145 146 javaman_rd[0] = ImageIO.read(Game.class.getResource("man/javaman_rd1.gif")); 147 javaman_rd[1] = ImageIO.read(Game.class.getResource("man/javaman_rd2.gif")); 148 javaman_rd[2] = ImageIO.read(Game.class.getResource("man/javaman_rd3.gif")); 149 150 javaman_s = ImageIO.read(Game.class.getResource("man/javaman_s.gif")); 151 152 } catch (IOException e) { 153 e.printStackTrace(); 154 } 155 } 156 /** 157 * 游戲初始化 158 */ 159 public void init(){ 160 boards.clear();//清空所有臺階 161 apples.clear(); 162 monsters.clear(); 163 rockets.clear(); 164 enterFlag = isDieFlag = scoreFlag =0; 165 man = null;//重置小人 166 score = 0;//重置分數 167 level = 0; 168 state = START; 169 for(int i=0;i<5;i++){//隨機產生5個臺階 170 boards.add(BoardNormal.randomOne((i+1)*100)); 171 } 172 Board b = boards.get(rnd.nextInt(5));//隨便從這5個臺階中挑出一個 173 /* 174 * 創建一個小人,坐標為上邊隨機選取臺階的正上方 175 */ 176 man = new Javaman(b.getX()+b.getWidth()/2-javaman_s.getWidth()/2,b.getY()-javaman_s.getHeight()); 177 } 178 179 int enterFlag = 0;//控制臺階入場的頻率 180 /** 181 * 臺階入場 182 */ 183 public void enterAction(){ 184 enterFlag++; 185 if(enterFlag%100==0){ 186 int index = rnd.nextInt(6); 187 /* 188 * 隨機創建6個臺階中的一個 189 */ 190 switch(index){ 191 case 0 : 192 boards.add(new BoardFlip()); 193 break; 194 case 1: 195 boards.add(new BoardMoveL()); 196 break; 197 case 2: 198 boards.add(new BoardMoveR()); 199 break; 200 case 3: 201 boards.add(new BoardNail()); 202 break; 203 case 4: 204 boards.add(new BoardNormal()); 205 break; 206 case 5: 207 boards.add(new BoardOnce()); 208 break; 209 } 210 } 211 if(enterFlag%(3000+level*500)==0){//每半分鐘出一個蘋果獎勵 212 apples.add(new Apple());//往數組里加一個新的蘋果 213 } 214 215 if(enterFlag%(1000-level*100)==0){ 216 Board b = boards.get(rnd.nextInt(boards.size())); 217 int x = b.getX()+b.getWidth()/2-15; 218 int y = b.getY()-30; 219 int ox1 = b.getX(); 220 int ox2 = b.getX()+b.getWidth(); 221 monsters.add(new Monster(x,y,ox1,ox2)); 222 } 223 224 if(enterFlag%(1500-level*100)==0){ 225 rockets.add(new Rocket(man.getX())); 226 } 227 } 228 /** 229 * 判斷小人是不是站在臺階上 230 */ 231 public void isManOnFloor(){ 232 man.setManOnFloor(false);//默認為小人不在臺階上 233 man.moveSpeed = 0;//將小人的橫向速度重置為0 234 for(Iterator<Board> it = boards.iterator();it.hasNext();){//遍歷集合 235 Board b = it.next();//取出集合元素 236 int manx = man.getX(); 237 int many = man.getY()+man.getHeight(); 238 int bx = b.getX(); 239 int by = b.getY(); 240 /* 241 * 判斷小人坐標和當前取出的臺階坐標是否重合,重合則把小人改成”站在臺階上“ 242 */ 243 if(manx>bx-man.getWidth() && manx<bx+b.getWidth() && many>by && many<by+b.getHeight()){ 244 man.setManOnFloor(true); 245 if(b instanceof Function){//如果這個方塊是功能性臺階 246 Function f = (Function)b;//強轉為功能臺階 247 f.function(man);//對小人執行臺階功能 248 } 249 } 250 } 251 } 252 /** 253 * 更新畫面(小人,臺階動起來) 254 */ 255 public void update(){ 256 if(man.isManOnFloor()){//如果小人在臺階上 257 man.setySpeed(-1);//小人跟著臺階一起向上 258 }else{//不在臺階上 259 man.setySpeed(2);//小人往下掉 260 } 261 for(Board b:boards){//遍歷所有臺階 262 if(b instanceof MoveObject){//如果臺階是會動的(除了頂部刺的所有臺階,頂部刺為了節省代碼,繼承了臺階類(board)) 263 MoveObject o = (MoveObject)b;//強轉一下咯 264 o.move();//給我動! 265 } 266 if(b instanceof Function){//如果這個方塊正好是功能性方塊(它有一些附帶的動畫) 267 Function f = (Function)b;//再轉! 268 if(!f.isFlag()){//如果這個方塊的功能被調用過 269 f.flash();//動畫! 270 } 271 } 272 } 273 for(Apple a:apples){ 274 a.move(); 275 } 276 for(Monster m:monsters){ 277 m.move(); 278 } 279 for(Rocket r:rockets){ 280 r.move(); 281 } 282 man.drop();//小人縱向移動(實際速度根據上面設置的縱向速度) 283 man.move();//小人橫向移動(實際速度根據鍵盤監聽和傳送帶提供的橫向速度) 284 } 285 /** 286 * 刪除出界臺階 287 */ 288 public void outOfBoundsAction(){ 289 for(Iterator<Board> it = boards.iterator();it.hasNext();){//遍歷!! 290 Board b = it.next();//取! 291 int by = b.getY(); 292 int ty = boardtop.getY(); 293 /* 294 * 如果臺階高度到了頂部刺的高度 295 */ 296 if(by<ty){ 297 it.remove();//出去了還不給我滾出集合! 298 } 299 } 300 for(Iterator<Monster> it = monsters.iterator();it.hasNext();){ 301 Monster m = it.next(); 302 int my = m.getY(); 303 int ty = boardtop.getY(); 304 if(my<ty){ 305 it.remove(); 306 } 307 } 308 for(Iterator<Rocket> it = rockets.iterator();it.hasNext();){ 309 Rocket r = it.next(); 310 int ry = r.getY(); 311 int ty = boardtop.getY(); 312 if(ry<ty){ 313 it.remove(); 314 } 315 } 316 } 317 int isDieFlag = 0;//控制下小人被頂部刺刺中時血量下降速度,總不能一秒降到-40吧? 318 /** 319 * 對小人血量的操作 320 */ 321 public void isDie(){ 322 int my = man.getY();//小人的縱坐標,橫坐標又不會讓小人死(呵呵) 323 if(my>HEIGHT){//如果掉下去了,當然是指掉到頭了! 324 man.die();//死吧死吧! 325 }else if(my<=boardtop.getY()+boardtop.getHeight()){//如果碰到刺了 326 if(isDieFlag%50==0){//控制下血量下降頻率,50*10ms降低一次 327 man.subLife();//小人生命減一。 328 } 329 isDieFlag++;//這個不懂???好吧直接問我 330 }else{ 331 isDieFlag = 0;//如果小人不在上面的地方,那么重置下,不然下次撞到刺可能就又要等500ms才掉血。 332 } 333 for(Iterator<Monster> it = monsters.iterator();it.hasNext();){ 334 Monster a = it.next(); 335 int ax1 = a.getX(); 336 int ax2 = a.getX()+a.getWidth(); 337 int ay1 = a.getY(); 338 int ay2 = a.getY()+a.getHeight(); 339 int mx1 = man.getX(); 340 int mx2 = man.getX()+man.getWidth(); 341 int my1 = man.getY(); 342 int my2 = man.getY()+man.getHeight(); 343 if(((mx1>=ax1 && mx1<=ax2)||(mx2>=ax1 && mx2<=ax2)) 344 &&((my1>=ay1 && my1<=ay2)||(my2>=ay1 && my2<=ay2)) 345 ){ 346 man.subLife(); 347 it.remove(); 348 } 349 } 350 for(Iterator<Rocket> it = rockets.iterator();it.hasNext();){ 351 Rocket r = it.next(); 352 int rx1 = r.getX(); 353 int rx2 = r.getX()+r.getWidth(); 354 int ry1 = r.getY(); 355 int ry2 = r.getY()+r.getHeight(); 356 int mx1 = man.getX(); 357 int mx2 = man.getX()+man.getWidth(); 358 int my1 = man.getY(); 359 int my2 = man.getY()+man.getHeight(); 360 if(((mx1>=rx1 && mx1<=rx2)||(mx2>=rx1 && mx2<=rx2)) 361 &&((my1>=ry1 && my1<=ry2)||(my2>=ry1 && my2<=ry2)) 362 ){ 363 man.subLife(); 364 it.remove(); 365 } 366 } 367 } 368 /** 369 * 判斷游戲結束了沒 370 */ 371 public void gameover(){ 372 if(man.getLife()<=0){//如果生命值為0了 373 state=GAME_OVER; 374 } 375 } 376 int scoreFlag = 0;//用于計時 377 /** 378 * 得分,2秒加一層 379 */ 380 public void getScore(){ 381 scoreFlag++; 382 if(scoreFlag%200==0){//200*10ms加一層 383 score++; 384 if(score%20==0 && level<9){ 385 level++; 386 } 387 } 388 } 389 390 public void getLife(){ 391 boolean getlife = false; 392 for(Iterator<Apple> it = apples.iterator();it.hasNext();){ 393 Apple a = it.next(); 394 /* 395 * 蘋果和小人的四個界點坐標 396 */ 397 int ax1 = a.getX(); 398 int ax2 = a.getX()+a.getWidth(); 399 int ay1 = a.getY(); 400 int ay2 = a.getY()+a.getHeight(); 401 int mx1 = man.getX(); 402 int mx2 = man.getX()+man.getWidth(); 403 int my1 = man.getY(); 404 int my2 = man.getY()+man.getHeight(); 405 if(((mx1>=ax1 && mx1<=ax2)||(mx2>=ax1 && mx2<=ax2)) 406 &&((my1>=ay1 && my1<=ay2)||(my2>=ay1 && my2<=ay2))){ 407 getlife = true; 408 it.remove(); 409 } 410 } 411 412 if(getlife){ 413 man.addLife(); 414 } 415 416 } 417 418 public void action(){ 419 this.addKeyListener(new KeyAdapter(){//鍵盤監聽 420 /** 421 * 鍵盤被按下時給小人速度 422 */ 423 @Override 424 public void keyPressed(KeyEvent e) { 425 int key = e.getKeyCode();//獲取按下的鍵是個啥 426 switch(key){ 427 case KeyEvent.VK_LEFT://按的是方向左: 428 man.setxSpeed(-2);//給個往左移的速度 429 break; 430 case KeyEvent.VK_RIGHT://按的是方向右: 431 man.setxSpeed(2);//給個往右移的速度啊! 432 break; 433 case KeyEvent.VK_SPACE://按的是空格: 434 if(state==RUNNING){ 435 state=PAUSE; 436 }else if(state==PAUSE){ 437 state=RUNNING; 438 }else if(state==START){ 439 state=RUNNING; 440 }else if(state==GAME_OVER){ 441 init();//游戲初始化,所有臺階和小人重新生成 442 state=START; 443 } 444 break; 445 } 446 } 447 448 /** 449 * 鍵盤松開時小人你就憋動啦! 450 */ 451 @Override 452 public void keyReleased(KeyEvent e) { 453 man.setxSpeed(0);//小人橫向速度重置為0 454 } 455 456 }); 457 /* 458 * 這兩句坑了我半天,先開始沒加鍵盤怎么按都沒反應 459 * 直到加了這兩句,也是從俄羅斯方塊代碼里看的。意思不是很了解,也懶得了解了 460 */ 461 this.setFocusable(true); 462 this.requestFocus(); 463 464 timer = new Timer();//把上面聲明的那個定時器引用指個對象給他,不然會報空指針哦~ 465 timer.schedule(new TimerTask(){ 466 /** 467 * 重寫run 468 */ 469 @Override 470 public void run() { 471 /* 472 * 想知道下面是干啥的你鼠標移上去唄 473 */ 474 if(state==RUNNING){ 475 enterAction(); 476 isManOnFloor(); 477 update(); 478 outOfBoundsAction(); 479 getLife(); 480 getScore(); 481 isDie(); 482 gameover(); 483 } 484 repaint();//重畫下,不然你玩張靜態圖片啊? 485 } 486 487 }, 0, intervel);//intervel沒忘吧,上面有寫,計時器時間間隔,10ms一次哦 488 } 489 /** 490 * 主方法,程序的入口 491 * @param args 492 */ 493 public static void main(String[] args) { 494 JFrame frame = new JFrame("Downwell");//新建一個窗體,標題為Downwell <-啥意思?百度去! 495 Game game = new Game();//新建一個游戲 496 game.init();//第一次運行你不得初始化啊! 497 frame.add(game);//把游戲添加到窗體里去(游戲這個類是繼承了JPanel了才可以添加的,別亂加別的對象哦) 498 frame.setSize(WIDTH, HEIGHT);//設置窗體寬高 499 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置默認關閉操作(關閉窗體則程序結束) 500 frame.setResizable(false);//設置窗體大小不能被改變(不懂就注釋了這句然后運行下,用鼠標拖下窗體四角) 501 frame.setLocationRelativeTo(null);//窗體居中顯示 502 frame.setVisible(true);//設置窗體可見,并提醒程序快點調用paint()方法 503 game.action();//游戲開始! 504 } 505 /** 506 * 重寫paint方法 507 */ 508 public void paint(Graphics g){ 509 paintStatic(g);//畫些靜止不動的背景 510 paintBoard(g);//畫臺階 511 paintMonster(g);//畫怪物 512 paintRocket(g);//畫火箭 513 paintApple(g);//畫蘋果 514 paintJavaman(g);//畫小人 515 paintLife(g);//畫小人的生命 516 paintScore(g);//畫分數 517 paintState(g);//畫狀態 518 } 519 /* 520 * 介紹下drawImage()六個參數的重載,最后一個直接寫null,只介紹前五個 521 * 第一個:要畫的圖片 522 * 第二,三個:畫的圖片從哪個坐標開始畫 523 * 第四,五個:控制圖片大小,按給定的寬高縮放后畫出來 524 */ 525 526 527 public void paintRocket(Graphics g){ 528 for(Rocket r:rockets){ 529 g.drawImage(r.getImage(),r.getX(),r.getY(),r.getWidth(),r.getHeight(),null); 530 } 531 } 532 533 public void paintMonster(Graphics g){ 534 for(Monster m:monsters){ 535 g.drawImage(m.getImage(),m.getX(),m.getY(),m.getWidth(),m.getHeight(),null); 536 } 537 } 538 539 public void paintState(Graphics g){ 540 if(state==PAUSE){ 541 g.drawImage(pause,0,0,WIDTH,HEIGHT,null); 542 } 543 if(state==START){ 544 g.drawImage(start,0,0,WIDTH,HEIGHT,null); 545 } 546 if(state==GAME_OVER){ 547 int x = 350; 548 int temp = score; 549 g.drawImage(gameover, 0, 0, WIDTH,HEIGHT,null); 550 do{ 551 int n = temp%10; 552 g.drawImage(num[n],x,500,100,100,null); 553 temp /= 10; 554 x -= 120; 555 }while(temp>0); 556 } 557 } 558 559 public void paintApple(Graphics g){ 560 for(Apple a:apples){ 561 g.drawImage(a.getImage(),a.getX(),a.getY(),a.getWidth(),a.getHeight(),null); 562 } 563 } 564 565 public void paintScore(Graphics g){ 566 Font font = new Font(Font.SANS_SERIF,Font.BOLD,25);//設置字體,我不想查字體的參數了,直接照搬飛機大戰 567 g.setColor(new Color(0xffffff));//白色的 568 g.setFont(font);//把畫筆字體設置為上面創建的字體 569 g.drawString("SCORE:"+score, WIDTH-150, 25);//這個坐標是慢慢試出來的,想改就改。 570 } 571 572 public void paintLife(Graphics g){ 573 Font font = new Font(Font.SANS_SERIF,Font.BOLD,25);//設置字體,我不想查字體的參數了,直接照搬飛機大戰 574 g.setColor(new Color(0xffffff));//白色的 575 g.setFont(font);//把畫筆字體設置為上面創建的字體 576 g.drawString("LIFE:"+man.getLife(), 10, 25);//這個坐標是慢慢試出來的,想改就改。 577 } 578 /** 579 * 畫臺階 580 * @param g 畫筆,我只寫一次,不需要太糾結畫筆是什么 581 */ 582 public void paintBoard(Graphics g){ 583 for(Board b:boards){//增強for遍歷集合 584 g.drawImage(b.getImage(), b.getX(), b.getY(), null);//畫! 585 } 586 } 587 /** 588 * 畫小人 589 * @param g 590 */ 591 public void paintJavaman(Graphics g){ 592 g.drawImage(man.getImage(), man.getX(), man.getY(), null);//畫!! 593 } 594 /** 595 * 畫背景 596 * @param g 597 */ 598 public void paintStatic(Graphics g){ 599 g.drawImage(background, 0, 0, WIDTH, HEIGHT, null);//畫背景!!! 600 g.drawImage(boardtop.image, boardtop.x, boardtop.y, boardtop.width, boardtop.height, null);//畫頂部那個刺!!!! 601 } 602 } 復制代碼復制代碼1 package com.tarena.downwell;2 /**3 * 可動臺階(除了頂部刺都算)4 * @author Misaki5 *6 */7 public interface MoveObject {8 final int ySpeed = 1;//每次往上移動一個像素9 void move();//移動! 10 } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.awt.image.BufferedImage;4 import java.util.Random;5 6 public class Monster implements MoveObject{7 private int x;8 private int y;9 private int ox1;//移動時的左界限 10 private int ox2;//移動時的右界限 11 private BufferedImage image; 12 private int width; 13 private int height; 14 private int xSpeed; 15 16 public Monster(int x,int y,int ox1,int ox2){ 17 this.x = x; 18 this.y = y; 19 this.ox1 = ox1; 20 this.ox2 = ox2; 21 this.image = Game.monster; 22 this.width = 30; 23 this.height = 30; 24 this.xSpeed = -1 + new Random().nextInt(2)*2;//橫向速度為-1或1 25 } 26 27 @Override 28 public void move() { 29 if(x<=ox1){ 30 xSpeed = 1; 31 } 32 if(x+width>=ox2){ 33 xSpeed = -1; 34 } 35 this.x += xSpeed; 36 this.y += ySpeed; 37 } 38 39 public int getX() { 40 return x; 41 } 42 43 public void setX(int x) { 44 this.x = x; 45 } 46 47 public int getY() { 48 return y; 49 } 50 51 public void setY(int y) { 52 this.y = y; 53 } 54 55 public int getOx1() { 56 return ox1; 57 } 58 59 public void setOx1(int ox1) { 60 this.ox1 = ox1; 61 } 62 63 public int getOx2() { 64 return ox2; 65 } 66 67 public void setOx2(int ox2) { 68 this.ox2 = ox2; 69 } 70 71 public BufferedImage getImage() { 72 return image; 73 } 74 75 public void setImage(BufferedImage image) { 76 this.image = image; 77 } 78 79 public int getxSpeed() { 80 return xSpeed; 81 } 82 83 public void setxSpeed(int xSpeed) { 84 this.xSpeed = xSpeed; 85 } 86 87 public int getWidth() { 88 return width; 89 } 90 91 public int getHeight() { 92 return height; 93 } 94 95 } 復制代碼復制代碼1 package com.tarena.downwell;2 3 import java.awt.image.BufferedImage;4 import java.util.Random;5 6 public class Rocket {7 private int x;8 private int y;9 private BufferedImage image; 10 private int width; 11 private int height; 12 private int ySpeed; 13 14 public Rocket(){ 15 Random rnd = new Random(); 16 this.x = rnd.nextInt(Game.WIDTH-this.width-25)+10; 17 this.y = Game.HEIGHT; 18 this.width = 50; 19 this.height = 90; 20 this.image = Game.rocket; 21 this.ySpeed = -5; 22 } 23 public Rocket(int x){ 24 this(); 25 this.x = x; 26 } 27 28 public void move(){ 29 this.y += ySpeed; 30 } 31 32 public int getX() { 33 return x; 34 } 35 36 public void setX(int x) { 37 this.x = x; 38 } 39 40 public int getY() { 41 return y; 42 } 43 44 public void setY(int y) { 45 this.y = y; 46 } 47 48 public BufferedImage getImage() { 49 return image; 50 } 51 52 public void setImage(BufferedImage image) { 53 this.image = image; 54 } 55 56 public int getWidth() { 57 return width; 58 } 59 60 public void setWidth(int width) { 61 this.width = width; 62 } 63 64 public int getHeight() { 65 return height; 66 } 67 68 public void setHeight(int height) { 69 this.height = height; 70 } 71 72 public int getySpeed() { 73 return ySpeed; 74 } 75 76 public void setySpeed(int ySpeed) { 77 this.ySpeed = ySpeed; 78 } 79 80 } 復制代碼 復制代碼1 package com.tarena.downwell;2 3 import java.awt.image.BufferedImage;4 import java.util.Random;5 6 public class Apple {7 private int x;8 private int y;9 private BufferedImage image; 10 private int width; 11 private int height; 12 private int xSpeed; 13 private int ySpeed; 14 15 public Apple(){ 16 Random rnd = new Random(); 17 this.x = rnd.nextInt(Game.WIDTH-this.width-20)+10; 18 this.y = rnd.nextInt(Game.HEIGHT-65)+65; 19 this.width = 30; 20 this.height = 30; 21 this.image = Game.apple; 22 switch(rnd.nextInt(2)){ 23 case 0: 24 xSpeed = -2;break; 25 case 1: 26 xSpeed = 2;break; 27 } 28 switch(rnd.nextInt(2)){ 29 case 0: 30 ySpeed = -2;break; 31 case 1: 32 ySpeed = 2;break; 33 } 34 } 35 36 public void move(){ 37 if(this.x<=10){ 38 this.xSpeed = 2; 39 } 40 if(this.x>=Game.WIDTH-20){ 41 this.xSpeed = -2; 42 } 43 if(this.y<=65){ 44 this.ySpeed = 2; 45 } 46 if(this.y>=Game.HEIGHT-this.height){ 47 this.ySpeed = -2; 48 } 49 this.x += xSpeed; 50 this.y += ySpeed; 51 } 52 53 public int getX() { 54 return x; 55 } 56 public void setX(int x) { 57 this.x = x; 58 } 59 public int getY() { 60 return y; 61 } 62 public void setY(int y) { 63 this.y = y; 64 } 65 public BufferedImage getImage() { 66 return image; 67 } 68 public void setImage(BufferedImage image) { 69 this.image = image; 70 } 71 public int getxSpeed() { 72 return xSpeed; 73 } 74 public void setxSpeed(int xSpeed) { 75 this.xSpeed = xSpeed; 76 } 77 public int getySpeed() { 78 return ySpeed; 79 } 80 public void setySpeed(int ySpeed) { 81 this.ySpeed = ySpeed; 82 } 83 public int getWidth() { 84 return width; 85 } 86 public int getHeight() { 87 return height; 88 } 89 90 } 復制代碼

?

總結

以上是生活随笔為你收集整理的是男人就下100层(小游戏)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。