타자게임소스 주석이 궁금합니다
발랄한그1녀
타자게임 소스 입니다 문제은행에 있는것이고 실행은 했습니다
import java.util.*;
import java.awt.*;
import java.awt.event.*;
class typinggameex3 extends frame
{
final int frame_width = 400;
final int frame_height = 300;
final int screen_width;
final int screen_height;
int speed = 500; // 단어가 떨어지는 속도... 높을 수록 느리다.
int interval = 2 * 1000; // 새로운 단어가 나오는 간격
int score = 0;
int life = 300;
int curlevel = 0;
final int max_level;
boolean isplaying = false;
wordgenerator wg = null; // 단어를 생성하는 쓰레드
worddropper wm = null; // 단어를 떨어뜨리는 쓰레드
fontmetrics fm; // 화면에서의 글자 길이를 구하는데 사용
threadgroup virusgrp = newthreadgroup(virus); // 바이러스 쓰레드들의 그룹
string[][] data = {
{태연,유리,윤아,효연,수영,서현,티파니,써니,제시카},
{태연,유리,윤아,효연,수영,서현,티파니,써니,제시카},
{태연,유리,윤아,효연,,수영,서현,티파니,써니,제시카},
{태연,유리,윤아,효연,수영,서현,티파니,써니,제시카},
};
final level[] level = {
new level(500, 2000, 1000, data[0]),
new level(250, 1500, 2000, data[1]),
new level(120, 1000, 3000, data[2]),
new level(100, 500, 4000, data[3]),
};
vectorwords = new vector();
textfield tf = newtextfield();
panel pscore = new panel(new gridlayout(1,3));
label lblevel = new label(level:+curlevel, label.center);
label lbscore = new label(score:+score, label.center);
label lblife = new label(life:+life, label.center);
mycanvas screen = new mycanvas();
typinggameex3() {
this(typinggame ver1.0);
}
typinggameex3(string title) {
super(title);
pscore.setbackground(color.yellow);
pscore.add(lblevel);
pscore.add(lbscore);
pscore.add(lblife);
add(pscore, north);
add(screen, center);
add(tf, south);
myeventhandler handler = new myeventhandler();
addwindowlistener(handler);
tf.addactionlistener(handler);
setbounds(500, 200, frame_width, frame_height);
setresizable(false);
setvisible(true);
screen_width = screen.getwidth();
screen_height = screen.getheight();
max_level = level.length-1;
fm = getfontmetrics(getfont());
}
public void repaint() { span la
super.repaint();
screen.repaint();
}
public void delay(int millis) {
try {
thread.sleep(millis);
} catch(exception e) {}
}
public void start() {
showlevel(0);
isplaying = true;
wg = new wordgenerator();
wg.start();
wm = new worddropper();
p classwm.start();
}
public level getlevel(int level) {
if(level max_level) level = max_level;
if(level 0) level = 0;
return level[level];
}
public boolean levelupcheck() {
level lvl = getlevel(curlevelng:0pt);
return score = lvl.levelupscore;
}
public synchronized int getcurlevel() {
return curlevel;
}
public synchronized void levelup() {
virusgrp.interrupt();
level lvl = getlevel(++curlevel);
lblevel.settext(level:+curlevel);
words.clear();
screen.clear();
showlevel(curlevel);
speed = lvl.speed;
interval = lvl.interval;
}
public void showlevel(int level) {
string tmp = level+level;
showtitle(tmp, 1 * 1000);
}
public void showtitle(string title, int time) {
graphics g = screen.getgraphics();
font titlefont = new font(serif,font.bold, 20);
g.setfont(titlefont);
fontmetrics fm = getfontmetrics(titlefont);
int width = fm.stringwidth(title);
g.drawstring(title, (screen_width-width)/2, screen_height/2);
delay(time);
}
public static void main(string[] args) {
typinggameex3 win = new typinggameex3();
win.start();
}
class worddropper extends thread {
public void run() {
outer:
while(isplaying) {
delay(speed);
for(int i=0; i words.size();i++){
word tmp = (word)words.get(i);
tmp.y += tmp.step; /o
if(tmp.y = screen_height) {
tmp.y = screen_height;
words.remove(tmp);
life--;
lblife.settext(life:+life);
break;
}
if(life = 0) {
isplaying = false;
showtitle(game over, 0);
break outer;
}
} // for
repaint();
}
} // end of run()
}
class wordgenerator extends thread {
public void run() {
while(isplaying) {
string[] data = level[getcurlevel()].data;
int rand = (int)(math.random()*data.length);
// 약 10번에 한번 꼴로 바이러스를 생성한다.
boolean isvirus = ((int)(math.random()*10) + 1) / 10 != 0;
word word = new word(data[rand], isvirus);
words.add(word);
delay(interval);
}
} // end of run()
}
class mycanvas extends canvas {
public void clear() {
graphics g = getgraphics();
g.clearrect(0, 0, frame_width, frame_height);
}
public void paint(graphics g) {
clear();
for(int i=0; i words.size(); i++) {
word tmp = (word)words.get(i);
g.setcolor(tmp.color);
g.drawstring(tmp.word, tmp.x,tmp.y);
}
}
}
class virusthread extends thread {
public virusthread(threadgroup group, string name){
super(group,name);
}
public void run() {
int rand = (int)(math.random()*5);
int oldvalue= 0;
int virustime =10 * 1000; // 바이러스 동작시간을 10초로 설정한다.
switch(rand) {
case 0:
speed = speed / 2;
break;
case 1:
interval = interval / 2;
break;
case 2:
speed = speed * 2;
break;
case 3:
interval = interval * 2;
break;
case 4:
words.clear();
break;
} // swtich
delay(virustime);
int curlevel =getcurlevel();
speed = level[curlevel].speed;
interval = level[curlevel].interval;
} // end of run()
}
class level {
int speed;
int interval;
int levelupscore;
string[] data;
level(int speed, int interval, int levelupscore, string[] data) {
this.speed = speed;
this.interval = interval;
this.levelupscore = levelupscore;
this.data = data;
}
}// gamelevel
class word {
string word = ;
int x = 0;
int y = 0;
int step = 5;
color color = color.black;
boolean isvirus = false;
;word(string word) {
this(word, 10, false);
}
word(string word, boolean isvirus) {
this(word, 10,isvirus);
}
word(string word, int step, boolean isvirus) {
this.word = word;
this.step = step;
this.isvirus = isvirus;
if(isvirus) color = color.red;
int strwidth = fm.stringwidth(word);
x = (int)(math.random() * screen_width);
if(x + strwidth= screen_width)
x = screen_width - strwidth;
}
public string tostring() {
return word;
}
}// end of class word
class myeventhandler extendswindowadapter implements actionlistener {
public void actionperformed(actionevent ae) {
string input = tf.gettext().trim();
tf.settext();
system.out.println(input);
if(!isplaying) return;
for(int i=0; i words.size() ; i++) {
word tmp = (word)words.get(i);
if(input.equals(tmp.word)) {
words.remove(i);
score += input.length() * 50;
lbscore.settext(score:+score);
toolkit.getdefaulttoolkit().beep();
if(curlevel!=max_level && levelupcheck()) {
levelup();
} else {
if(tmp.isvirus) {
new virusthread(virusgrp, virus).start();
}
}
break;
}
} // for
repaint(); // 변화가 있을때 마다 호출해야 바로 바로 적용된다.
}
public void windowclosing(windowevent e) {
e.getwindow().setvisible(false);
e.getwindow().dispose();
system.exit(0);
}
} // class myeventhandler
타자게임 소스 입니다 문제발표를 해야될꺼 같은데 주석 좀 부탁드립니다.
-
누리봄
첫단계 부터 순서대로 공부하면 쉽게 할텐데... 급해서 그런거겠죠?
-
다슬
제가 짠 소스가 슬슬 돌아다니는군요. ^^
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2697830 | [질문]어느 범위로 들어가면 다음 프레임으로 넘어갈려면??? | 맑다 | 2025-06-11 |
2697806 | [질문] 이미지나 텍스트를 플래시상으로 불러올때 | 미라 | 2025-06-11 |
2697778 | 투명도 css-validator 체크 문의 (3) | 츄릅 | 2025-06-11 |
2697729 | 오류가딱1개...... | 아롱별 | 2025-06-10 |
2697703 | 개인 일기장 홈페이지 만들기 | 푸르 | 2025-06-10 |
2697676 | nChar 질문 | 소율 | 2025-06-10 |
2697652 | xhtml 관련 질문이요 ! (6) | 클 | 2025-06-09 |
2697626 | warning: variable "dbUS" was declared but never referenced (1) | 꽃내 | 2025-06-09 |
2697567 | mfc 질문드립니다! (2) | 물맑 | 2025-06-09 |
2697542 | iframe은 표준? 비표준? (2) | 조은 | 2025-06-08 |
2697516 | datagrid 활성/비활성시 알파값 변경 | 시내 | 2025-06-08 |
2697487 | html5 css3 학원 추천좀해주세요 (1) | 예그리나 | 2025-06-08 |
2697459 | 이런 질문도 답변해주실지는 모르겠습니다만 병특에 관한 질문입니다. | 승아 | 2025-06-08 |
2697422 | 가운데 정렬하는 방법좀 흑흑흑... (3) | 목련 | 2025-06-07 |
2697395 | 홈페이지 기본구조에 대해서... (6) | 모든 | 2025-06-07 |
2697366 | 에..조금 짜보고 다시 질문입니다. (2) | 나샘 | 2025-06-07 |
2697333 | li 가운데 정렬.....도와 주세용... (7) | 초고리 | 2025-06-07 |
2697284 | 이미지를 흐리게 (2) | 난새 | 2025-06-06 |
2697258 | VC++ 6.0(studio)을 깔면서 재미가 붙었는데..ㅠㅠ (4) | 앵겨쪼 | 2025-06-06 |
2697228 | WorkFlow가 궁금합니다.. 다들 어떻게 하시는지.. (1) | 애기 | 2025-06-06 |