Java 100本ノックのうちの2本目。
タイピングゲームです。
画面をクリックしたら、スペースキーを押せば始まります。
この8月のうちに自分のプログラミング能力を格段に向上させたいと画策しております。
プログラミング能力の向上は、
・人の書いたコードを読む
・人の書いたコードを真似して書く
・人の書いたコードを改造する
・自分で課題を見つけてコードを書く
こういったことを繰り返していくしかないのかな。と思っています。
もちろん、時々、本などの基本に立ち返って自分が忘れていたことなどを思い出すというのも大事ですね。
100ノックとはいっても、本当に100個もプログラムを書くかは未定。
(そういえば、バッティングセンター行きたいな)
ソースコード
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class typing_applet extends Applet implements KeyListener{
private final int GAME_CONFIG_DEMO = 0;
private final int GAME_CONFIG_PLAYING = 1;
private int WIDTH;
private int HEIGHT;
private DispKey DKey;
private int gameConfig;
private int qetNum;
public void init(){
WIDTH = getSize().width;
HEIGHT = getSize().height;
setBackground(Color.white);
}
public void start(){
DKey = new DispKey();
gameConfig = GAME_CONFIG_DEMO;
addKeyListener(this);
}
public void gameStart(){
qetNum = 0;
gameConfig = GAME_CONFIG_PLAYING;
}
public void gameEnd(){
qetNum = 0;
gameConfig = GAME_CONFIG_DEMO;
}
public void keyPressed(KeyEvent e){
switch(gameConfig){
case GAME_CONFIG_DEMO:
if(e.VK_SPACE == e.getKeyCode()){
this.gameStart();
}
case GAME_CONFIG_PLAYING:
if(DKey.compareToInpKey(e.getKeyCode(), qetNum) == 0){
this.nextChar();
}
}
repaint();
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
private void nextChar(){
if(qetNum < DKey.getCharNumMax() - 1){
qetNum += 1;
}else{
this.gameEnd();
}
}
public void paint(Graphics g){
g.setFont(new Font("Dialog", Font.PLAIN, 14));
g.setColor(Color.black);
switch(gameConfig){
case GAME_CONFIG_DEMO:
g.drawString("Start SpaceKey", 3, 30);
break;
case GAME_CONFIG_PLAYING:
g.drawString(DKey.getCharString(qetNum), 55, 30);
break;
}
}
}
class DispKey{
private String question;
private int charNumMax;
DispKey(){
question = "XYCOKAOKFELAOWQCBN";
charNumMax = question.length();
}
private int getActiveCharCode(int num){
int activeCharCode = 0;
if(num < charNumMax){
activeCharCode = (int)question.charAt(num);
}
return activeCharCode;
}
public int compareToInpKey(int inpKeyCode, int num){
int ret;
int upperKeyCode = 0;
ret = 0;
if(inpKeyCode >= 65 && inpKeyCode <= 90){
upperKeyCode = inpKeyCode;
}else if(inpKeyCode >= 97 && inpKeyCode <= 122){
upperKeyCode = inpKeyCode - 32;
}else{
ret = 2;
}
if( ret != 2){
if(upperKeyCode == this.getActiveCharCode(num)){
ret = 0;
}else{
ret = 1;
}
}
return ret;
}
public String getCharString(int num){
return question.substring(num, num + 1);
}
public int getCharNumMax(){
return charNumMax;
}
}
・・・・・・・・・・・・・・・・
Perlで人工無脳を作ってたときは、それこそ、自分で課題を見つけては、GOOGLEで調べたり、人に聞いたりしてなんとかかんとか解決しましたよ。
最初に書いたコードなんて、ツギハギだらけで人に見せられるシロモノではなかったですけどね。
それでも、そういった甲斐があって、今ではチャットや掲示板の類いであれば自分でプログラムすることができます。
“悩んだ甲斐”というのは絶対にあるもので、悩んだ時間は無駄にしたようにその時は思えますが、後々から自分の財産になるものです。
絶対にそうですよ。
子供へのマニフェストとして、ゲームを作って遊ばせてあげるというのがあるので、ゲームを作ります。
しかしながら、時間がありません。
仕事をさっさと片付けて、休暇を余分に取って、その日に集中してやるっきゃないかもです。
スーパートレックは既にプレイ済みなので、違うものを作ります。
前にプログラムした「ストリートトレック」という、ゲームがあります。
主人公(私の友人のトレック)がビール瓶を武器に戦う近接戦アクションゲームなんですが、それを元に改造して、子供がパソコンルームでワイワイと楽しめるゲームを作りたいと思います。
ストリートトレックへのリンク・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・
色々と忙しくあれこれと詰め込んでしまっています。
中国語に、卓球に、水泳に、ゲームプログラミングに、旅行。
仕事の準備もあります。
仕事の準備は最短時間で最高効率で行います。
職員の中にはマターリとしながらやっている方もいますが、私は最短時間で終わらせてサッサと休暇を取ります。
そうそう、それと実家にも帰らないといけません。
1年帰ってないですから。
3月11日の時も心配してくれたけど、帰ってないし。
・・・・・・・・・・・・・・・・
夏休暇もあっという間に終わっちゃいそうだな。
しっかり、準備しないと。
時間の意識をしっかりもって、やることをハッキリさせないといけない。
優先順位とかも。
卓球の練習はあと3回。
中国語のレッスンは無し。
ラングエッジ・エクスチェンジは未定(おそらく最低1回はやる)。
休暇中1日は実家に帰る。
休暇中1日はゲームプログラミングに使う。
9月以降の準備を万全にして、バタバタしないですむように、印刷物なども用意しておく。
物品の整理、資料の整理を万端にしておく。
それをしっかりやったら秩父旅行、さらに、16日からの中国旅行が始まる。
今日は、実は何も予定を入れていない。
予定を入れすぎたので、暇な日を一日作っておいたのだ。
今日は掃除ができるし、普段できなかったことをやりたい。
・・・・・・・・・・・・・・・・・
昨日は中国語のレッスンだった。
とても良い人だし、とてもピャオリャンで萌える。
指輪をしてるんだけど、既婚者なのかな。
その講師が長沙出身で、私のためにあれこれとアレンジしてくれている。
電車の予約、現地のホテルの予約などをやってくれた。
なんていいひとなんだ。