Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划)
文章目錄
- 學習思路
- 為什么要寫這個項目
- 需要多少時間
- 1.IO流學習
- 2.多線程學習
- 3.坦克大戰項目完成
- 目標兩周的時間完成這三個內容
- 2022 - 1 - 11 到 2022 - 1 - 25
- 項目描述
- 1. 程序描述
- 2.功能介紹
- 1.1 開始游戲
- 1.2 分數統計
- 寫項目前的提醒
- 本章內容
- 1. java繪圖坐標體系
- 坐標體系 - 介紹
- 坐標體系 - 像素
- 2.java繪圖技術
- 介紹 - 快速入門
- 繪圖原理
- Graphics類
- 自己繪制坦克,思維圖
游戲項目
坦克大戰第一部分
學習思路
因坦克大戰難度較高,而且如今的java基礎還未學習IO流以及多線程課程,為此,在做坦克大戰項目的同時,邊做邊學,理解IO流以及多線程處理技術,所以,此文章分多個部分
為什么要寫這個項目
-
好玩
-
涉及到java各個方面的技術
- 鞏固舊知識,學習新知識
需要多少時間
1.IO流學習
2.多線程學習
3.坦克大戰項目完成
目標兩周的時間完成這三個內容
2022 - 1 - 11 到 2022 - 1 - 25
項目描述
1. 程序描述
- 本程序是一個簡單的坦克游戲程序,用java語言編寫,在jdk 環境下運行。游戲開始時,用戶通過鍵盤操縱坦克移動,轉彎和射擊,與敵人坦克進行交戰,直到消滅所有敵人就可以過關。本程序包括23個類,2800多行代碼,和三個gif圖片
2.功能介紹
1.1 開始游戲
- 本程序運行的主函數類時 tankGame類,將此類編譯后直接運行,就會出現如下界面:
- 上圖顯示的界面為程序的主界面。用戶可以通過點擊上面的菜單項開始進行游戲或設置游戲規則。界面中的黑色區域為游戲面板,游戲開始時就在此面板中進行。初始時面板中顯示 stagel,表示從第一關開始游戲。點擊游戲菜單中的“新游戲”菜單項,就可以正是開始游戲,其界面如下顯示:
- 在上圖顯示的界面中,在下方的橘黃色坦克是用戶可以操縱的坦克。上面的3輛淺藍色坦克是敵人坦克。用戶可以通過按鍵盤的W/S/A/D 4個鍵控制坦克向上下左右移動,按J鍵可以使坦克射擊。在游戲界面中除了坦克還有障礙物,障礙物分為3種,一種是磚墻,磚墻可以阻止坦克移動,但用炮彈可以打穿;一種是鐵墻,用炮彈是不能打穿的;一種是河流,可以組織坦克移動,但炮彈可以穿過去。
- 本游戲一共分為8關,每一關的障礙物布局和敵人坦克數量都不同。
- 上圖中顯示的是第一關的游戲界面。游戲界面下方的數字20表示第一關敵人坦克的數量,當每次消滅一輛坦克時數量會減少,直到敵人坦克的數量為0時第一關結束,繼續打下一關。數字3表示用戶操縱的坦克的生命值,當玩家坦克被敵人擊毀后生命值減1。當生命值減為零后,游戲結束。
1.2 分數統計
-
當游戲打過一關后,就會彈出一對話框顯示出玩家在這一關中所得的分數,如下圖所示:
-
上圖中顯示出敵人坦克共分為5種,每種坦克具有的特點不同,分值也不同。淺藍色坦克是最普通的一種,消滅一輛淺藍色坦克可得到100分,在敵人坦克中%70的概率會出現淺藍色坦克。粉色坦克發射出的炮彈速度快,戰斗力比淺藍色坦克要強一些,消滅一輛粉色坦克可得到200分。紅色坦克移動速度快,比較靈活,消滅一輛藍色坦克可得到300分。綠色坦克是重型坦克,擊中4次才能將其消滅,消滅一輛綠色坦克可得到400分。最后一種深藍色坦克是坦克中戰斗力最強的,他有著以上幾種坦克具有的所有特性,不僅射擊,移動速度快,而且生命值也很高,需要擊中它6次才能消滅。深藍坦克有時作為關底出現,而且并不是每一關都有關底,如果按照正常游戲,只有3,6,8關才會出現關底。消滅一輛深藍色坦克得到1000分
-
當游戲結束后,玩家每一關得到的分數會累積,統計出最后的分數,如果分數破了記錄,就會彈出對話框讓用戶輸入姓名,這次游戲的分數會保存到數據庫中。本游戲的數據庫存放的是玩家的游戲記錄,點擊設置菜單中的游戲記錄選項,就可以查看游戲記錄,如下圖所示:
寫項目前的提醒
本章內容
1. java繪圖坐標體系
坐標體系 - 介紹
- 下圖說明了Java坐標系。坐標原點位于左上角,以像素為單位。在Java坐標系中,第一個是x坐標,表示當前位置為水平方向,距離坐標原點x個像素;第二個是y坐標,表示當前位置為垂直方向,距離坐標原點y個像素。
坐標體系 - 像素
繪圖還必須要搞清楚一個非常重要的概念 - 像素 一個像素等于多少厘米?
計算機在屏幕上顯示的內容都是由屏幕上的每一個像素組成的。列入,計算機顯示器的分辨率是800 * 600,表示計算機屏幕上的每一行由800個點組成,共有600行,整個計算機屏幕共有480 000 個像素。像素是一個密度單位,而厘米是長度單位,兩者無法比較
2.java繪圖技術
介紹 - 快速入門
借用案例,來講解java繪圖技術原理(彈出一個窗口,窗口里繪制一個小圓圈)
package com.tao.draw;import javax.swing.*; import java.awt.*;/*** Create By 劉鴻濤* 2022/1/11 23:20*/ public class DrawCicle extends JFrame{ //繼承JFrame 框架,可以理解成是一個畫框//定義一個面板private MyPanel mp = null;public static void main(String[] args) {new DrawCicle(); // System.out.println("程序退出");}public DrawCicle(){//初始化面板mp = new MyPanel();//把面板放入到窗口(畫框)this.add(mp);//設置窗口的大小this.setSize(800,600);//當點擊窗口的 x ,程序完全退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true); //可以顯示} }//1.先定義一個MyPanel(),繼承JPanel類,畫圖形,就在面板上面 // Panel:畫板, class MyPanel extends JPanel {//說明://1.MyPanel 對象就是一個畫板//2.Graphics g 把 g理解成一支畫筆//3.Graphics 提供了很多繪圖的方法//Graphics g@Override//Graphics:繪圖public void paint(Graphics g){ //繪圖方法System.out.println("paint方法被調用了");super.paint(g); //調用父類的方法完成初始化//畫出一個圓形g.drawOval(10,10,100,100);} }繪圖原理
Component類提供了兩個和繪圖相關最重要的方法:
當組件第一次在屏幕顯示的時候,程序會自動的調用paint()方法來繪制組件
在以下情況paint()將會被調用:
思考題:如何證明上面的三種情況,會調用paint()方法
Graphics類
- Graphics類你可以理解就是畫筆,為我們提供了各種繪制圖形的方法:
自己繪制坦克,思維圖
package com.tao.draw;import javax.swing.*; import java.awt.*;/*** Create By 劉鴻濤* 2022/1/12 3:45*/ public class DrawTank_ extends JFrame { //繼承JFrame框架,畫框private MyTank tank = null;public static void main(String[] args) {new DrawTank_();}public DrawTank_(){tank = new MyTank();this.add(tank);this.setSize(800,600);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //點x 關閉程序this.setVisible(true); //可以顯示} } class MyTank extends JPanel{@Overridepublic void paint(Graphics g){System.out.println("paint被調用");super.paint(g); //調用父類的方法完成初始化//注意,重下往上畫//背景色黑色g.setColor(Color.BLACK);g.fillRect(0,0,800,600);g.setColor(Color.GRAY);//底盤g.fillRect(395,288,30,36);g.setColor(Color.CYAN);//輪胎g.fillRect(420,275,15,60); //右g.fillRect(385,275,15,60); //左//炮臺g.setColor(Color.RED);g.fillOval(400,300,20,20);g.drawLine(410,280,410,320); //400 + 20/2 300 - 20g.setColor(Color.ORANGE);g.setFont(new Font("楷體",Font.BOLD,100));g.drawString("坦 克 大 戰",120,200);} }- 有誤差,不過影響不大,坐標與大小自行調整
總結
以上是生活随笔為你收集整理的Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MS17-010特别版补丁NSA漏洞
- 下一篇: python实现3d建模工具_Pytho