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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划)

發(fā)布時(shí)間:2023/12/31 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 學(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ù)

  • java面向?qū)ο缶幊?/li>
  • 多線程
  • 文件i/o操作
  • 數(shù)據(jù)庫(kù)
    • 鞏固舊知識(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)目前的提醒

  • 編寫坦克大戰(zhàn)游戲,你需要有一定的java基礎(chǔ),是完全可以聽(tīng)懂的
  • 記住一點(diǎn):成為一個(gè)編程專家的秘訣就是:思考 ---- 編程 ---- 思考 ----- 編程
  • 項(xiàng)目是從小到大的過(guò)程,每個(gè)完整的項(xiàng)目被分解成不同的版本,從1.0到1.1 …最后版,隨版本的增加,將新的功能和新的知識(shí)點(diǎn)融入到項(xiàng)目中,整個(gè)過(guò)程是循序漸進(jìn)的。
  • 本章內(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)最重要的方法:

  • paint(Graphics g)繪制組件的外觀
  • repaint()刷新組件的外觀
  • 當(dāng)組件第一次在屏幕顯示的時(shí)候,程序會(huì)自動(dòng)的調(diào)用paint()方法來(lái)繪制組件

    在以下情況paint()將會(huì)被調(diào)用:

  • 窗口最小化,再最大化
  • 窗口的大小發(fā)生變化
  • repaint函數(shù)被調(diào)用
  • 思考題:如何證明上面的三種情況,會(huì)調(diào)用paint()方法

    Graphics類

    • Graphics類你可以理解就是畫筆,為我們提供了各種繪制圖形的方法:
  • 畫直線
  • drawLine(int x1,int y1,int x2,int y2)
  • 畫矩形邊框
  • drawRect(int x,int y,int width,int height)
  • 畫橢圓邊框
  • drawOval(int x,int y,int width,int height)
  • 填充矩形
  • fillRect(int x,int y,int width,int height)
  • 填充橢圓
  • fillOval(int x,int y,int width,int height)
  • 畫圖片
  • drawImage(Image img,int x,int y,..)
  • 畫字符串
  • drawString(String str,int x,int y)
  • 設(shè)置畫筆的字體
  • setFont(Font font)
  • 設(shè)置畫筆的顏色
  • setColor(Color c) 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);//演示繪制不同的圖形.. // 1. 畫直線 // drawLine(int x1,int y1,int x2,int y2)g.drawLine(20,20,100,100); // 2. 畫矩形邊框 // drawRect(int x,int y,int width,int height)g.drawRect(50,50,10,10);// 3. 畫橢圓邊框 // drawOval(int x,int y,int width,int height)g.drawOval(60,60,50,30);// 4. 填充矩形 // fillRect(int x,int y,int width,int height)g.fillRect(500,300,50,60);// 5. 填充橢圓 // fillOval(int x,int y,int width,int height)g.setColor(Color.BLUE); //設(shè)置顏色g.fillOval(400,300,20,30);// 6. 畫圖片 // drawImage(Image img,int x,int y,..) // g.drawImage()//1.獲取圖片資源(out -> chapter -根目錄)Image jing = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/jing.jpg"));g.drawImage(jing,400,200,192,108,this);// 7. 畫字符串 // drawString(String str,int x,int y)// 8. 設(shè)置畫筆的字體、顏色g.setColor(Color.ORANGE);g.setFont(new Font("黑體",Font.BOLD,50));g.drawString("幸運(yùn)星",100,100);//設(shè)置畫筆的字體 setFont(Font font)//設(shè)置畫筆的顏色 setColor(Color c)} }

    自己繪制坦克,思維圖

    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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。