Java Applet シューティングゲーム「carac」ソースコード ― 2022年08月12日 05:29
/* carac */
import java.applet.*;
import java.awt.*;
class Tek {
int xk, yk;
int idkx, idky;
boolean ari, ido;
}//class Tek end
public class carac extends Applet implements Runnable {
int stno;
int tidorit, tidoxh, tidoyh;
boolean idouari;
int gcau;
int slmati;
int tokten, ttenzo, zanki;
int mojtak, shotido, bakido;
Font f1;
boolean mkon, hkon, xkon;
boolean gamran;
Thread kicker = null;
Image offs;
Graphics grf;
int tekmax; final int tekmaxmax = 25;
int bakmax; final int bakmaxmax = 10;
int shotmax; final int shotmaxmax = 5;
int spbakmax; final int spbakmaxmax = 5;
Tek tek[];
Tek bak[];
Tek shot[];
Tek spbak[];
int idox, idoy, idcau, idcaumax;
int idkox, idkoy;
int jibx, jiby, jibido;
boolean shotmati, spbakmati;
int spbakrit;
final int haba = 300;
final int taka = 200;
final int yoyu = 15;
Button butn1, butn2, butn3;
Label label1,label2;
public void init() {
slmati = 40;
mojtak = 12; shotido = 3; bakido = 2;
f1 = new Font("TimesRoman", Font.PLAIN, mojtak);
mkon = false; hkon = false; xkon = false;
gamran = false;
offs = createImage(haba, taka+yoyu);
grf = offs.getGraphics();
grf.setFont(f1);
setLayout(null);
resize(500,500);
//butn1 = new Button("stage1"); add(butn1);
//butn2 = new Button("stage2"); add(butn2);
//butn3 = new Button("stage3"); add(butn3);
butn1 = new Button("stage1"); add(butn1); butn1.setBounds(4,4,50,22);
butn2 = new Button("stage2"); add(butn2); butn2.setBounds(55,4,50,22);
butn2.disable();
butn3 = new Button("stage3"); add(butn3); butn3.setBounds(110,4,50,22);
butn3.disable();
label1 = new Label("Move:'Right' or 'Left'Key" );
label1.setBounds(4, 30, 150, 22); label1.setBackground(Color.white); add(label1);
label2 = new Label("Shoot:'x'Key");
label2.setBounds(4, 50, 150, 22); label2.setBackground(Color.white); add(label2);
shotmati = false;
spbakmati = false;
clia();
tek = new Tek[tekmaxmax];
bak = new Tek[bakmaxmax];
shot = new Tek[shotmaxmax];
spbak = new Tek[spbakmaxmax];
stno = 1;
}//init end
void tek1set() {
int kj;
stno = 1;
jibx = 145; jiby = taka - 2; jibido = 2;
tekmax = 11; /* 0..11 */
idox = 1; idoy = (mojtak / 1); idcau = 0; idcaumax = 100;
idkox = idox; idkoy = idoy;
gcau = 0;
tokten = 0; ttenzo = 100; zanki = 5;
kj = haba - haba / 2;
shotmax = 0; shotset();
bakmax = 1; bakset();
spbakrit = 80; spbakmax = 4; spbakset(); /* dummy */
idouari = false;
tidorit = 50; tidoxh = 100; tidoyh = 500; /* dummy */
for(int i = 0; i <= tekmax; i++) tek[i] = new Tek();
tek[0].xk = kj; tek[0].yk = 2 + mojtak*3;
tek[1].xk = kj - 1*mojtak*2; tek[1].yk = 2 + mojtak*3;
tek[2].xk = kj - 2*mojtak*2; tek[2].yk = 2 + mojtak*3;
tek[3].xk = kj - 3*mojtak*2; tek[3].yk = 2 + mojtak*3;
tek[4].xk = kj - 4*mojtak*2; tek[4].yk = 2 + mojtak*3;
kj -= mojtak;
tek[5].xk = kj; tek[5].yk = 2 + mojtak*2;
tek[6].xk = kj - 1*mojtak*2; tek[6].yk = 2 + mojtak*2;
tek[7].xk = kj - 2*mojtak*2; tek[7].yk = 2 + mojtak*2;
tek[8].xk = kj - 3*mojtak*2; tek[8].yk = 2 + mojtak*2;
kj -= mojtak;
tek[9].xk = kj; tek[9].yk = 2 + mojtak;
tek[10].xk = kj - 1*mojtak*2; tek[10].yk = 2 + mojtak;
tek[11].xk = kj - 2*mojtak*2; tek[11].yk = 2 + mojtak;
for(int i = 0; i <= tekmax; i++) {
tek[i].ari = true; tek[i].ido = false;
tek[i].idkx = idox; tek[i].idky = idoy;
}//for end
}//tek1set end
void tek2set() {
int kj;
stno = 2;
jibx = 145; jiby = taka - 2; jibido = 2;
tekmax = 17;
idox = 1; idoy = (mojtak / 1); idcau = 0; idcaumax = 100;
idkox = idox; idkoy = idoy;
gcau = 0;
tokten = 0; ttenzo = 100; zanki = 5;
kj = haba - haba / 2;
shotmax = 1; shotset();
bakmax = 3; bakset();
spbakrit = 80; spbakmax = 4; spbakset(); /* dummy */
idouari = true;
tidorit = 50; tidoxh = 100; tidoyh = 500;
for(int i = 0; i <= tekmax; i++) tek[i] = new Tek();
tek[0].xk = kj; tek[0].yk = 2 + mojtak*4;
tek[1].xk = kj - 1*mojtak*2; tek[1].yk = 2 + mojtak*4;
tek[2].xk = kj - 2*mojtak*2; tek[2].yk = 2 + mojtak*4;
tek[3].xk = kj - 3*mojtak*2; tek[3].yk = 2 + mojtak*4;
tek[4].xk = kj - 4*mojtak*2; tek[4].yk = 2 + mojtak*4;
tek[5].xk = kj - 5*mojtak*2; tek[5].yk = 2 + mojtak*4;
kj -= mojtak;
tek[6].xk = kj; tek[6].yk = 2 + mojtak*3;
tek[7].xk = kj - 1*mojtak*2; tek[7].yk = 2 + mojtak*3;
tek[8].xk = kj - 2*mojtak*2; tek[8].yk = 2 + mojtak*3;
tek[9].xk = kj - 3*mojtak*2; tek[9].yk = 2 + mojtak*3;
tek[10].xk = kj - 4*mojtak*2; tek[10].yk = 2 + mojtak*3;
kj -= mojtak;
tek[11].xk = kj; tek[11].yk = 2 + mojtak*2;
tek[12].xk = kj - 1*mojtak*2; tek[12].yk = 2 + mojtak*2;
tek[13].xk = kj - 2*mojtak*2; tek[13].yk = 2 + mojtak*2;
tek[14].xk = kj - 3*mojtak*2; tek[14].yk = 2 + mojtak*2;
kj -= mojtak;
tek[15].xk = kj; tek[15].yk = 2 + mojtak;
tek[16].xk = kj - 1*mojtak*2; tek[16].yk = 2 + mojtak;
tek[17].xk = kj - 2*mojtak*2; tek[17].yk = 2 + mojtak;
for(int i = 0; i <= tekmax; i++) {
tek[i].ari = true; tek[i].ido = false;
tek[i].idkx = idox; tek[i].idky = idoy;
}//for end
}//tek2set end
void tek3set() {
int kj;
stno = 3;
jibx = 145; jiby = taka - 2; jibido = 2;
tekmax = 24;
idox = 1; idoy = (mojtak / 1); idcau = 0; idcaumax = 100;
idkox = idox; idkoy = idoy;
gcau = 0;
tokten = 0; ttenzo = 100; zanki = 5;
kj = haba - haba / 2;
shotmax = 2; shotset();
bakmax = 9; bakset();
spbakrit = 20; spbakmax = 4; spbakset();
idouari = true;
tidorit = 20; tidoxh = 100; tidoyh = 500;
for(int i = 0; i <= tekmax; i++) tek[i] = new Tek();
tek[0].xk = kj; tek[0].yk = 2 + mojtak*5;
tek[1].xk = kj - 1*mojtak*2; tek[1].yk = 2 + mojtak*5;
tek[2].xk = kj - 2*mojtak*2; tek[2].yk = 2 + mojtak*5;
tek[3].xk = kj - 3*mojtak*2; tek[3].yk = 2 + mojtak*5;
tek[4].xk = kj - 4*mojtak*2; tek[4].yk = 2 + mojtak*5;
tek[5].xk = kj - 5*mojtak*2; tek[5].yk = 2 + mojtak*5;
tek[6].xk = kj - 6*mojtak*2; tek[6].yk = 2 + mojtak*5;
kj -= mojtak;
tek[7].xk = kj; tek[7].yk = 2 + mojtak*4;
tek[8].xk = kj - 1*mojtak*2; tek[8].yk = 2 + mojtak*4;
tek[9].xk = kj - 2*mojtak*2; tek[9].yk = 2 + mojtak*4;
tek[10].xk = kj - 3*mojtak*2; tek[10].yk = 2 + mojtak*4;
tek[11].xk = kj - 4*mojtak*2; tek[11].yk = 2 + mojtak*4;
tek[12].xk = kj - 5*mojtak*2; tek[12].yk = 2 + mojtak*4;
kj -= mojtak;
tek[13].xk = kj; tek[13].yk = 2 + mojtak*3;
tek[14].xk = kj - 1*mojtak*2; tek[14].yk = 2 + mojtak*3;
tek[15].xk = kj - 2*mojtak*2; tek[15].yk = 2 + mojtak*3;
tek[16].xk = kj - 3*mojtak*2; tek[16].yk = 2 + mojtak*3;
tek[17].xk = kj - 4*mojtak*2; tek[17].yk = 2 + mojtak*3;
kj -= mojtak;
tek[18].xk = kj; tek[18].yk = 2 + mojtak*2;
tek[19].xk = kj - 1*mojtak*2; tek[19].yk = 2 + mojtak*2;
tek[20].xk = kj - 2*mojtak*2; tek[20].yk = 2 + mojtak*2;
tek[21].xk = kj - 3*mojtak*2; tek[21].yk = 2 + mojtak*2;
kj -= mojtak;
tek[22].xk = kj; tek[22].yk = 2 + mojtak;
tek[23].xk = kj - 1*mojtak*2; tek[23].yk = 2 + mojtak;
tek[24].xk = kj - 2*mojtak*2; tek[24].yk = 2 + mojtak;
for(int i = 0; i <= tekmax; i++) {
tek[i].ari = true; tek[i].ido = false;
tek[i].idkx = idox; tek[i].idky = idoy;
}//for end
}//tek3set end
void shotset() {
for(int i = 0; i <= shotmax; i++) {
shot[i] = new Tek(); shot[i].ari = false;
}//for end
}//shotset end
void bakset() {
for(int i = 0; i <= bakmax; i++) {
bak[i] = new Tek(); bak[i].ari = false;
}//for end
}//bakset end
void spbakset() {
for(int i = 0; i <= spbakmax; i++) {
spbak[i] = new Tek(); spbak[i].ari = false;
}//for end
}//spbakset end
void jibegak() {
grf.setColor(Color.cyan);
grf.drawString("A", jibx, jiby);
}//jibegak end
void tekdanido() {
int dmy1;
dmy1 = 0;
idcau++;
if(idcau >= idcaumax) {idcau = 0; idox = -idox; dmy1 = idoy;}
for(int i = 0; i <= tekmax; i++) {
if(tek[i].ari && (! tek[i].ido))
tek[i].xk += idox; tek[i].yk += dmy1;
}//for end
}//tekdanido end
void tekkoidouon() {
int dmy1;
switch(gcau) {
case 0: case 1: case 2: case 5: case 6: case 7:
case 10: case 11: case 16: case 17:
case 21: case 22: case 23: case 24:
dmy1 = (int)(Math.random() * tidorit);
for(int i = 0; i <= tekmax; i++) {
if(tek[i].ari && (! tek[i].ido) && dmy1 == 0) {
tek[i].ido = true;
return;
}//if end
}//for end
break;
}//switch end
}//tekkoidouon end
void tekkoidou() {
int dmy1;
for(int i = 0; i <= tekmax; i++) {
if(tek[i].ari && tek[i].ido) {
if(stno == 3) {
if(tek[i].xk > jibx) tek[i].idkx = -idkox;
else tek[i].idkx = idkox;
}//if end
else {
dmy1 = (int)(Math.random() * tidoxh); /* */
if(dmy1 == 0) tek[i].idkx = -tek[i].idkx;
}//else end
dmy1 = (int)(Math.random() * tidoyh); /* */
if(dmy1 == 0) tek[i].idky = -tek[i].idky;
tek[i].xk += tek[i].idkx;
if(tek[i].xk <= 0) tek[i].xk = haba;
else if(tek[i].xk >= haba) tek[i].xk = 0;
tek[i].yk += (tek[i].idky / 5);
if(tek[i].yk <= 0) tek[i].yk = taka + yoyu;
else if(tek[i].yk >= (taka + yoyu)) tek[i].yk = 0;
}//if end
}//for end
}//tekkoidou end
boolean tekhit() {
boolean dmy1 = false;
for(int i = 0; i <= tekmax; i++) {
if(tek[i].ari) {
if((tek[i].xk - (mojtak / 2)) <= jibx &&
jibx <= (tek[i].xk + (mojtak / 2)) &&
(tek[i].yk - (mojtak / 2)) <= jiby &&
jiby <= (tek[i].yk + (mojtak / 2))) {
grf.setColor(Color.red);
grf.drawString("X", tek[i].xk, tek[i].yk);
dmy1 = true;
tek[i].ari = false; zanki -= 1;
}//if end
}//if end
}//for end
if(dmy1) return true; else return false;
}//tekhit end
void tekegak() {
for(int i = 0; i <= tekmax; i++) {
if(tek[i].ari) {
grf.setColor(Color.green);
grf.drawString("T", tek[i].xk, tek[i].yk);
}//if end
}//for end
}//tekegak end
void shoton() {
for(int i = 0; i <= shotmax; i++) {
if((! shot[i].ari) && (! shotmati)) {
shot[i].xk = jibx; shot[i].yk = jiby - mojtak; shot[i].ari = true;
shotmati = true;
}//if end
}//for end
}//shoton end
void shotegak() {
shotmati = false;
for(int k = 0; k <= shotmax; k++) {
if(shot[k].ari) {
grf.setColor(Color.yellow);
grf.drawString("^", shot[k].xk, shot[k].yk);
shot[k].yk -= shotido;
if(shot[k].yk >= (taka - (mojtak * 2))) shotmati = true;
if(shot[k].yk <= 0) shot[k].ari = false;
}//if end
}//for end
}//shotegak end
void shothit() {
for(int k = 0; k <= shotmax; k++) {
for(int i = 0; i <= tekmax; i++) {
if(tek[i].ari && shot[k].ari) {
if((tek[i].xk - (mojtak / 2)) <= shot[k].xk &&
shot[k].xk <= (tek[i].xk + (mojtak / 2)) &&
(tek[i].yk - (mojtak / 2)) <= shot[k].yk &&
shot[k].yk <= (tek[i].yk + (mojtak / 2))) {
grf.setColor(Color.red);
grf.drawString("X", tek[i].xk, tek[i].yk);
tek[i].ari = false; tokten += ttenzo; gcau += 1;
shot[k].ari = false;
}//if end
}//if end
}//for end
}//for end
}//shothit end
void bakon() {
int dmy1;
for(int j = 0; j <= bakmax; j++) {
dmy1 = (int)(Math.random() * (tekmax + 1));
for(int i = 0; i <= tekmax; i++) {
if(dmy1 == i) {
if(tek[i].ari && (! bak[j].ari)) {
bak[j].xk = tek[i].xk; bak[j].yk = tek[i].yk + mojtak;
bak[j].ari = true;
}//if end
}//if end
}//for end
}//for end
}//bakon end
void bakegak() {
for(int i = 0; i <= bakmax; i++) {
if(bak[i].ari) {
grf.setColor(Color.magenta);
grf.drawString("|", bak[i].xk, bak[i].yk);
bak[i].yk += bakido;
if(bak[i].yk >= taka) bak[i].ari = false;
}//if end
}//for end
}//bakegak end
boolean bakhit() {
boolean dmy1 = false;
for(int i = 0; i <= bakmax; i++) {
if(bak[i].ari) {
if((bak[i].xk - (mojtak / 2)) <= jibx &&
jibx <= (bak[i].xk + (mojtak / 2)) &&
(bak[i].yk - (mojtak / 2)) <= jiby &&
jiby <= (bak[i].yk + (mojtak / 2))) {
grf.setColor(Color.red);
grf.drawString("X", bak[i].xk, bak[i].yk);
dmy1 = true;
bak[i].ari = false; zanki -= 1;
}//if end
}//if end
}//for end
if(dmy1) return true; else return false;
}//bakhit end
void spbakon() {
int dmy1;
for(int j = 0; j <= spbakmax; j++) {
for(int i = 0; i <= tekmax; i++) {
if(tek[i].ari && tek[i].ido) {
dmy1 = (int)(Math.random() * spbakrit);
if(dmy1 == 0) {
if(! spbak[j].ari) {
spbak[j].xk = tek[i].xk; spbak[j].yk = tek[i].yk + mojtak;
spbak[j].ari = true;
}//if end
}//if end
}//if end
}//for end
}//for end
}//spbakon end
void spbakegak() {
for(int i = 0; i <= spbakmax; i++) {
if(spbak[i].ari) {
grf.setColor(Color.magenta);
grf.drawString("*", spbak[i].xk, spbak[i].yk);
spbak[i].yk += bakido * 2;
if(spbak[i].yk >= taka) spbak[i].ari = false;
}//if end
}//for end
}//spbakegak end
boolean spbakhit() {
boolean dmy1 = false;
for(int i = 0; i <= spbakmax; i++) {
if(spbak[i].ari) {
if((spbak[i].xk - (mojtak / 2)) <= jibx &&
jibx <= (spbak[i].xk + (mojtak / 2)) &&
(spbak[i].yk - (mojtak / 2)) <= jiby &&
jiby <= (spbak[i].yk + (mojtak / 2))) {
grf.setColor(Color.red);
grf.drawString("X", spbak[i].xk, spbak[i].yk);
dmy1 = true;
spbak[i].ari = false; zanki -= 1;
}//if end
}//if end
}//for end
if(dmy1) return true; else return false;
}//spbakhit end
public void run() {
while(kicker != null) {
if(gamran) {
clia();
kisyori();
if((! bakhit()) && (! tekhit()) && (! spbakhit())) jibegak();
bakon(); bakegak();
if(stno == 3) {spbakon(); spbakegak();}
shotegak(); shothit();
if(idouari) {tekkoidouon(); tekkoidou();}
tekdanido();
tekegak();
toktenkak();
gamova();
cliames();
repaint();
}//if end
try {
Thread.sleep(slmati);
} catch(InterruptedException e) {}
}//while end
kicker = null;
}//run end
void toktenkak() {
grf.setColor(Color.blue);
grf.drawString("ten= "+tokten, 5, taka+yoyu-2);
grf.setColor(Color.cyan);
grf.drawString("zan= "+zanki, haba-50, taka+yoyu-2);
}//toktenkak end
void cliames() {
int cau = 0;
for(int i = 0; i <= tekmax; i++) if(! tek[i].ari) cau++;
if(cau >= tekmax + 1) {
grf.setColor(Color.magenta);
grf.drawString("Omedeto !!", 100, taka + yoyu - 2);
jiby -= 1; if(jiby <= (mojtak + 2)) {
jiby = mojtak + 2;
gamran = false;
switch(stno){
case 1: butn1.enable(); butn2.enable(); stno = 2; break;
case 2: butn1.enable(); butn2.enable(); butn3.enable(); stno = 3; break;
}
}//if jib idou end
}//if end
}//cliames end
void gamova() {
if(zanki <= 0) {
grf.setColor(Color.blue);
grf.drawString("Zannen !", 100, taka + yoyu - 2);
gamran = false;
}//if end
}//gamova end
public boolean action(Event e, Object o) {
String lab = o.toString();
if(e.target instanceof Button) {
if(lab.equals("stage1")) {tek1set(); stno = 1; gamran = true;}
if(lab.equals("stage2")) {tek2set(); stno = 2; gamran = true;}
if(lab.equals("stage3")) {tek3set(); stno = 3; gamran = true;}
}//if end
return true;
}//action end
public boolean handleEvent(Event e) {
if(e.id == Event.KEY_ACTION) {
if(e.key == e.RIGHT) mkon = true;
if(e.key == e.LEFT) hkon = true;
return true;
}//if end
if(e.id == Event.KEY_ACTION_RELEASE) {
if(e.key == e.RIGHT) mkon = false;
if(e.key == e.LEFT) hkon = false;
return true;
}//if end
if(e.id == Event.KEY_PRESS) {
if(e.key == 'x') xkon = true;
return true;
}//if end
if(e.id == Event.KEY_RELEASE) {
if(e.key == 'x') xkon = false;
return true;
}//if end
return super.handleEvent(e);
}//handleEvent end
void kisyori() {
if(mkon && jibx <= (haba - (mojtak / 2))) jibx += jibido;
if(hkon && jibx >= 0) jibx -= jibido;
if(xkon) shoton();
}//kisyori end
public void start() {
if(kicker == null) { kicker = new Thread(this); kicker.start(); }
}//start end
public void stop() {
if(kicker != null) { kicker.stop(); kicker = null; }
}//stop end
public void update(Graphics g) {
paint(g);
}//update end
void clia() {
grf.setColor(Color.black);
grf.fillRect(0, 0, haba, taka+yoyu);
grf.setColor(Color.blue);
grf.drawLine(0, taka, haba, taka);
}//clia end
public void paint(Graphics g) {
g.drawImage(offs, 4, 80, this);
}//paint end
public static void main(String[] args) {
// TODO code application logic here
new MyFrame("carac", new carac(), 500, 500);
}
}
コメント
トラックバック
このエントリのトラックバックURL: http://tukasa.asablo.jp/blog/2022/08/12/9517036/tb