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