今からはじめるプログラミング61(シューティング?)
シューティングにもいろいろ飽きてきたので。
(わからないことにつかれた)
プログラムの構造がよくわからいので、
(シンプルに上から流れないと理解できない)
わかるようにシンプルに修正して、
(エラーのないように機能を削って)
みよう。
という感じで、時計に改造しましたw
(どうしてこうなった?)
とはいえ、いろいろまだ残っているのですが。
(なんとなくプログラムの構造が?見えた?)
100行以上のプログラムは年寄りにはつらいので、100行以下になったShootingクラスが以下です。(なお、修正はパッケージごとコピーをとっておこなっています。取り返しのつかない修正をしてしまう前に、バックアップを忘れずにw)
-------------------------------
package sample27;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
/**
* @author user
* @modify histories
* to ke i
*/
public class Shooting {
public static ShootingFrame shootingFrame;
public static boolean loop;
public static void main(String[] args) {
shootingFrame = new ShootingFrame();
loop = true;
Graphics gra = shootingFrame.panel.image.getGraphics();
// FPS
long startTime;
long fpsTime = 0;
int fps = 30;
int FPS = 0;
int FPSCount = 0;
//時計用ふぉーまった
DateFormat dt = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
EnumShootingScreen screen = EnumShootingScreen.START;
BufferedImage image=null;
try {
image = ImageIO.read(new File("./ぺんぎん.png"));
} catch (IOException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
//むげんるーぷ
while (loop) {
//FPSけいさん
if *1 {
screen = EnumShootingScreen.GAME;
}
break;
case GAME:
// mod start 2022/8/2 ma2
// Player描画
gra.setColor(Color.BLUE);
font = new Font("SansSerif", Font.PLAIN, 20);
metrics = gra.getFontMetrics(font);
//とけい表示用日付のオブジェクトをフォーマッタを通して文字列に。
String drawString =dt.format(new Date());;
gra.drawString(drawString, 150 - (metrics.stringWidth(drawString) / 2), 50);
//えを1秒ごとにかえる
gra.drawImage(image,200,200,200,200,null);
break;
}
gra.setColor(Color.BLACK);
gra.setFont(new Font("SansSerif", Font.PLAIN, 10));
gra.drawString(FPS + "FPS", 0, 470);
shootingFrame.panel.draw();
try {
long runTime = System.currentTimeMillis() - startTime;
if (runTime < (1000 / fps)) {
Thread.sleep*2;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
--------------------------------------
実行結果は以下です。
普通の時計(⬇️)は高いですが、プログラムならただです?
*1:System.currentTimeMillis() - fpsTime) >= 1000) {
fpsTime = System.currentTimeMillis();
FPS = FPSCount;
FPSCount = 0;
}
FPSCount++;
startTime = System.currentTimeMillis();
gra.setColor(Color.WHITE);
gra.fillRect(0, 0, 500, 500);
switch (screen) {
case START:
gra.setColor(Color.BLACK);
Font font = new Font("SansSerif", Font.PLAIN, 50);
gra.setFont(font);
FontMetrics metrics = gra.getFontMetrics(font);
gra.drawString("Shooting?", 250 - (metrics.stringWidth("Shooting?") / 2), 100);
font = new Font("SansSerif", Font.PLAIN, 20);
gra.setFont(font);
metrics = gra.getFontMetrics(font);
gra.drawString("Press SPACE to Start", 250 - (metrics.stringWidth("Press SPACE to Start") / 2), 160);
if (Keyboard.isKeyPressed(KeyEvent.VK_SPACE