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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

文章目錄

  • 學習思路
    • 為什么要寫這個項目
    • 需要多少時間
      • 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ù)

  • java面向?qū)ο缶幊?/li>
  • 多線程
  • 文件i/o操作
  • 數(shù)據(jù)庫
    • 鞏固舊知識,學習新知識

    需要多少時間

    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è)置菜單中的游戲記錄選項,就可以查看游戲記錄,如下圖所示:

    寫項目前的提醒

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

  • paint(Graphics g)繪制組件的外觀
  • repaint()刷新組件的外觀
  • 當組件第一次在屏幕顯示的時候,程序會自動的調(diào)用paint()方法來繪制組件

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

  • 窗口最小化,再最大化
  • 窗口的大小發(fā)生變化
  • repaint函數(shù)被調(diào)用
  • 思考題:如何證明上面的三種情況,會調(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 框架,可以理解成是一個畫框//定義一個面板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);//演示繪制不同的圖形.. // 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("幸運星",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); //點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)容,希望文章能夠幫你解決所遇到的問題。

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