Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划)
文章目錄
- 學習思路
- 為什么要寫這個項目
- 需要多少時間
- 1.IO流學習
- 2.多線程學習
- 3.坦克大戰(zhàn)項目完成
- 目標兩周的時間完成這三個內(nèi)容
- 2022 - 1 - 11 到 2022 - 1 - 25
- 項目描述
- 1. 程序描述
- 2.功能介紹
- 1.1 開始游戲
- 1.2 分數(shù)統(tǒng)計
- 寫項目前的提醒
- 本章內(nèi)容
- 1. java繪圖坐標體系
- 坐標體系 - 介紹
- 坐標體系 - 像素
- 2.java繪圖技術(shù)
- 介紹 - 快速入門
- 繪圖原理
- Graphics類
- 自己繪制坦克,思維圖
游戲項目
坦克大戰(zhàn)第一部分
學習思路
因坦克大戰(zhàn)難度較高,而且如今的java基礎(chǔ)還未學習IO流以及多線程課程,為此,在做坦克大戰(zhàn)項目的同時,邊做邊學,理解IO流以及多線程處理技術(shù),所以,此文章分多個部分
為什么要寫這個項目
-
好玩
-
涉及到java各個方面的技術(shù)
- 鞏固舊知識,學習新知識
需要多少時間
1.IO流學習
2.多線程學習
3.坦克大戰(zhàn)項目完成
目標兩周的時間完成這三個內(nèi)容
2022 - 1 - 11 到 2022 - 1 - 25
項目描述
1. 程序描述
- 本程序是一個簡單的坦克游戲程序,用java語言編寫,在jdk 環(huán)境下運行。游戲開始時,用戶通過鍵盤操縱坦克移動,轉(zhuǎn)彎和射擊,與敵人坦克進行交戰(zhàn),直到消滅所有敵人就可以過關(guān)。本程序包括23個類,2800多行代碼,和三個gif圖片
2.功能介紹
1.1 開始游戲
- 本程序運行的主函數(shù)類時 tankGame類,將此類編譯后直接運行,就會出現(xiàn)如下界面:
- 上圖顯示的界面為程序的主界面。用戶可以通過點擊上面的菜單項開始進行游戲或設(shè)置游戲規(guī)則。界面中的黑色區(qū)域為游戲面板,游戲開始時就在此面板中進行。初始時面板中顯示 stagel,表示從第一關(guān)開始游戲。點擊游戲菜單中的“新游戲”菜單項,就可以正是開始游戲,其界面如下顯示:
- 在上圖顯示的界面中,在下方的橘黃色坦克是用戶可以操縱的坦克。上面的3輛淺藍色坦克是敵人坦克。用戶可以通過按鍵盤的W/S/A/D 4個鍵控制坦克向上下左右移動,按J鍵可以使坦克射擊。在游戲界面中除了坦克還有障礙物,障礙物分為3種,一種是磚墻,磚墻可以阻止坦克移動,但用炮彈可以打穿;一種是鐵墻,用炮彈是不能打穿的;一種是河流,可以組織坦克移動,但炮彈可以穿過去。
- 本游戲一共分為8關(guān),每一關(guān)的障礙物布局和敵人坦克數(shù)量都不同。
- 上圖中顯示的是第一關(guān)的游戲界面。游戲界面下方的數(shù)字20表示第一關(guān)敵人坦克的數(shù)量,當每次消滅一輛坦克時數(shù)量會減少,直到敵人坦克的數(shù)量為0時第一關(guān)結(jié)束,繼續(xù)打下一關(guān)。數(shù)字3表示用戶操縱的坦克的生命值,當玩家坦克被敵人擊毀后生命值減1。當生命值減為零后,游戲結(jié)束。
1.2 分數(shù)統(tǒng)計
-
當游戲打過一關(guān)后,就會彈出一對話框顯示出玩家在這一關(guān)中所得的分數(shù),如下圖所示:
-
上圖中顯示出敵人坦克共分為5種,每種坦克具有的特點不同,分值也不同。淺藍色坦克是最普通的一種,消滅一輛淺藍色坦克可得到100分,在敵人坦克中%70的概率會出現(xiàn)淺藍色坦克。粉色坦克發(fā)射出的炮彈速度快,戰(zhàn)斗力比淺藍色坦克要強一些,消滅一輛粉色坦克可得到200分。紅色坦克移動速度快,比較靈活,消滅一輛藍色坦克可得到300分。綠色坦克是重型坦克,擊中4次才能將其消滅,消滅一輛綠色坦克可得到400分。最后一種深藍色坦克是坦克中戰(zhàn)斗力最強的,他有著以上幾種坦克具有的所有特性,不僅射擊,移動速度快,而且生命值也很高,需要擊中它6次才能消滅。深藍坦克有時作為關(guān)底出現(xiàn),而且并不是每一關(guān)都有關(guān)底,如果按照正常游戲,只有3,6,8關(guān)才會出現(xiàn)關(guān)底。消滅一輛深藍色坦克得到1000分
-
當游戲結(jié)束后,玩家每一關(guān)得到的分數(shù)會累積,統(tǒng)計出最后的分數(shù),如果分數(shù)破了記錄,就會彈出對話框讓用戶輸入姓名,這次游戲的分數(shù)會保存到數(shù)據(jù)庫中。本游戲的數(shù)據(jù)庫存放的是玩家的游戲記錄,點擊設(shè)置菜單中的游戲記錄選項,就可以查看游戲記錄,如下圖所示:
寫項目前的提醒
本章內(nèi)容
1. java繪圖坐標體系
坐標體系 - 介紹
- 下圖說明了Java坐標系。坐標原點位于左上角,以像素為單位。在Java坐標系中,第一個是x坐標,表示當前位置為水平方向,距離坐標原點x個像素;第二個是y坐標,表示當前位置為垂直方向,距離坐標原點y個像素。
坐標體系 - 像素
繪圖還必須要搞清楚一個非常重要的概念 - 像素 一個像素等于多少厘米?
計算機在屏幕上顯示的內(nèi)容都是由屏幕上的每一個像素組成的。列入,計算機顯示器的分辨率是800 * 600,表示計算機屏幕上的每一行由800個點組成,共有600行,整個計算機屏幕共有480 000 個像素。像素是一個密度單位,而厘米是長度單位,兩者無法比較
2.java繪圖技術(shù)
介紹 - 快速入門
借用案例,來講解java繪圖技術(shù)原理(彈出一個窗口,窗口里繪制一個小圓圈)
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);//設(shè)置窗口的大小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方法被調(diào)用了");super.paint(g); //調(diào)用父類的方法完成初始化//畫出一個圓形g.drawOval(10,10,100,100);} }繪圖原理
Component類提供了兩個和繪圖相關(guān)最重要的方法:
當組件第一次在屏幕顯示的時候,程序會自動的調(diào)用paint()方法來繪制組件
在以下情況paint()將會被調(diào)用:
思考題:如何證明上面的三種情況,會調(diào)用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 關(guān)閉程序this.setVisible(true); //可以顯示} } class MyTank extends JPanel{@Overridepublic void paint(Graphics g){System.out.println("paint被調(diào)用");super.paint(g); //調(diào)用父類的方法完成初始化//注意,重下往上畫//背景色黑色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("坦 克 大 戰(zhàn)",120,200);} }- 有誤差,不過影響不大,坐標與大小自行調(diào)整
總結(jié)
以上是生活随笔為你收集整理的Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MS17-010特别版补丁NSA漏洞
- 下一篇: IDEA远程调试Java代码