【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】

文字制限節約のためimportは省きます

public class MojiTest0621p2 {
JFrame frame1;
BufferStrategy bstrategy;
int count =0;
MojiTest0621p2(){
    frame1=new JFrame("ゲームテスト");
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setBackground(Color.WHITE);
frame1.setResizable(false);
frame1.setVisible(true);
Insets insets = frame1.getInsets();
frame1.setSize(600 + insets.left + insets.right,400 + insets.top + insets.bottom);
frame1.setLocationRelativeTo(null);
         frame1.setIgnoreRepaint(true);
frame1.createBufferStrategy(2);
bstrategy = frame1.getBufferStrategy();

Timer t=new Timer();
t.schedule(new MyTimerTask(),10,500);
}
public static void main(String args[]){
MojiTest0621p2 gtm =new MojiTest0621p2();
}


class MyTimerTask extends TimerTask{
@Override
public void run() {

Graphics g=bstrategy.getDrawGraphics();
if(bstrategy.contentsLost()==false){
Insets insets=frame1.getInsets();
g.translate(insets.left,insets.top);//左上 文字は別
g.setColor(Color.BLUE);
String sa = "Hello、Worldハローワールド"; // 文字列saを生成
String sb = "えんがち"; // 文字列sbを生成
String sc = "あつい"; // 文字列scを生成
int gyo1=0;
int gyo2=0;
int gyo3=0;
String str1="Hello、Worldハローワールド";
String str2="えんがち";
g.setFont(new Font("SansSerif",Font.BOLD,20));
for(gyo1=1;gyo1<=sa.length();gyo1++){
String s1 = sa.substring(0 , gyo1); // 1文字目からi文字目を取得
g.drawString(s1, 100, 100);
}
if(str1.equals(sa)==true){
for(gyo2=1;gyo2<=sb.length();gyo2++){
String s2 = sb.substring(0 , gyo2); // 1文字目からi文字目を取得
g.drawString(s2, 100, 150);
}
}
(str2.equals(sb)==true){
for(gyo3=1;gyo3<=sc.length();gyo3++){
String s3 = sc.substring(0 , gyo3);
g.drawString(s3, 100, 200);
}
}

bstrategy.show();}
g.dispose();
}
}
}
javaの質問です
ノベルゲームのTimerTaskでオートモードを作りたいのですがうまく作れません。
Hello、Worldハローワールドを一文字ずつ毎秒ごとに描画し、読み終わったら
えんがちを一文字ずつ描画するというプログラムを組みたいです。
上記のプログラムをベースに(でもいくらでも変えていいですよ)改善箇所、修復箇所を
お願いします

A 回答 (1件)

import javax.swing.*;


import java.awt.*;
import java.awt.image.*;
import java.util.*;

public class Q5995266 {
JFrame frame1;
BufferStrategy bstrategy;
Q5995266(){

frame1=new JFrame("ゲームテスト");
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setBackground(Color.WHITE);
frame1.setResizable(false);
frame1.setVisible(true);
Insets insets = frame1.getInsets();
frame1.setSize(600 + insets.left + insets.right,400 + insets.top + insets.bottom);
frame1.setLocationRelativeTo(null);
frame1.setIgnoreRepaint(true);
frame1.createBufferStrategy(2);
bstrategy = frame1.getBufferStrategy();

java.util.Timer t=new java.util.Timer();
t.schedule(new MyTimerTask(),10,500);
}

public static void main(String args[]){
Q5995266 gtm =new Q5995266();
}
class MyTimerTask extends TimerTask{

/* インスタンス変数として持ってみる */
int line = 0;
int position = 0;
/* コンストラクタで与えてもいいかもしれませんね */
String[] messages = {
"Hello、Worldハローワールド",
"えんがち",
"あつい"
};

@Override
public void run() {

Graphics g = bstrategy.getDrawGraphics();

if(bstrategy.contentsLost()==false){

/*
一応全部消して書き直すようにしてますが、これが必要なのか自信がありません。とりあえずそれっぽい動きはしています。
*/
Insets insets = frame1.getInsets();
g.clearRect(insets.left,insets.top,insets.right - insets.left,insets.bottom - insets.top);
g.translate(insets.left,insets.top);//左上文字は別
g.setColor(Color.BLUE);
g.setFont(new Font("SansSerif",Font.BOLD,20));
for(int i = 0;i < line ;i++){
g.drawString(messages[i], 100,100 + 50 * i);
}
System.out.println(messages[line].substring(0,position));
g.drawString(messages[line].substring(0,position), 100,100 + 50 * line);

if(position < messages[line].length()){
position += 1;
}else{
if(line == messages.length - 1){
}else{
position = 0;
line += 1;
}
}

bstrategy.show();
g.dispose();

}
}
}
}
    • good
    • 0
この回答へのお礼

おお!できました。ありがとうございます!
頂いたプログラミングをよく理解して今後もがんばります

お礼日時:2010/06/29 22:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報