質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

解決済

1回答

1131閲覧

JavaAppletからアプリケーションへの変更

narudo

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

0クリップ

投稿2020/07/25 15:50

編集2020/07/26 00:22

前提・実現したいこと

以前自作したjavaappletをアプリケーションで動くように変更したいと考えているのですがUIの配置はできているのですが画像の移動の処理やリスナー処理がうまくできていません。コンパイルはできますが理想とする動きをしないです。目標は実行時、敵と自分が表示されている。スターとボタンを押すことでゲームが開始し自分・敵・球が任意で動かすことです。現状は実行時自分と敵が表示されない。スタートボタンを押しても何も起きなく困っています。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

import javax.swing.*; import java.awt.*; import java.awt.event.*; /* <applet code="MyGame.class" width = 400 height=400> </applet> */ //MyGameでピクチャを移動 public class MyGame extends JApplet{ public static void main(final String[] args) { final JFrame frame = new JFrame("game"); final MyGame k = new MyGame(); frame.add("Center", k); frame.pack(); frame.setSize(450, 450); frame.setVisible(true); k.init(); k.start(); } JButton left,right,start,ban; //meがcp,youがplayer Image me = null, you = null, mebl = null, youbl = null; int mv = 10, mex, mey, youx, youy, vme, vyou, bl1x, bl1y, bl1v, bl2x, bl2y, bl2v; int mezanki, youzanki, nowbullet, score; int pm = 2,py = 2,pn = 10,ps = 0; boolean gamest = false, moveleft = false, moveright = false, shot = false; public void init() { //画像の座標 mex = 250; mey = 0; youx = 0; youy = 245;//全体が写るように //弾丸の初期位置 bl1v = 0; bl1x = -10; bl1y = -10; bl2v = 0; bl2x = -10; bl2y = -10; //ゲーム設定 mezanki = pm; youzanki = py; nowbullet = pn; score = ps; //オブジェクトの速度 vme = 100; //画面レイアウトクリア setLayout(null); //キーリスナーの設定 final MyKeyListener kl = new MyKeyListener(); addKeyListener(kl); //アクションリスナーの設定 final MyActionListener al = new MyActionListener(); //ボタンの表示 left = new JButton("←"); left.addActionListener(al); left.setBounds(0,350,60,30); add(left); right = new JButton("→"); right.addActionListener(al); right.setBounds(180,350,60,30); add(right); start = new JButton("START"); start.addActionListener(al); start.setBounds(260,350,80,30); add(start); ban = new JButton("発"); ban.addActionListener(al); ban.setBounds(350,340,50,50); add(ban); //パネルに表示 final MyPanel pn = new MyPanel(); pn.setBackground(Color.BLACK); add(pn); pn.setBounds(0,0,400,297); me = getImage(getDocumentBase(), "me.png"); you = getImage(getDocumentBase(), "you.png"); mebl = getImage(getDocumentBase(),"tama2.jpg"); youbl = getImage(getDocumentBase(),"tama1.jpg"); final MyPicture m = new MyPicture(mex, mey, 'm'); m.start(); final MyPicture n = new MyPicture(bl1x, bl1y, 'n'); n.start(); final MyPicture y = new MyPicture(youx, youy, 'y'); y.start(); final MyPicture q = new MyPicture(bl2x,bl2y,'q'); q.start(); setFocusable(true); }//init // パネルクラスの継承 class MyPanel extends JPanel { // 画像表示 public void paintComponent(final Graphics g) { super.paintComponent(g); g.drawImage(you, youx, youy,this); g.drawImage(me, mex, mey, this); g.drawImage(mebl, bl1x, bl1y, this); g.drawImage(youbl, bl2x, bl2y, this); g.setColor(Color.yellow); g.drawString("残弾数:" + nowbullet + ",スコア:" + score, 250, 295); g.drawString("敵残機:" + mezanki + ",プレイヤー残機:" + youzanki, 250, 275); } }//MyPane //キーリスナークラスの継承 public class MyKeyListener extends KeyAdapter { //キープレス public void keyPressed(final KeyEvent ke) { // 矢印キー"→"をpush if (ke.getKeyCode() == KeyEvent.VK_RIGHT) { moveright = true; } // 矢印キー"←"をpush if (ke.getKeyCode() == KeyEvent.VK_LEFT) { moveleft = true; } //スペースキーをpush if(ke.getKeyCode() == KeyEvent.VK_SPACE){ shot = true; } //エンターキーをpush if(gamest == false){ if(ke.getKeyCode() == KeyEvent.VK_ENTER){ gamest = true; //初期値 mezanki = pm; youzanki = py; nowbullet = pn; score = ps; } } } // キーリリースごとのアクションを設定 public void keyReleased(final KeyEvent ke) { // 矢印キー"→"を if (ke.getKeyCode() == KeyEvent.VK_RIGHT) { moveright = false; } // 矢印キー"←"を else if (ke.getKeyCode() == KeyEvent.VK_LEFT) { moveleft = false; } //スペースキーをpush else if (ke.getKeyCode() == KeyEvent.VK_SPACE) { shot = false; } }// キーリリースアクション }//KeyListener //アクションリスナークラスの継承 public class MyActionListener implements ActionListener{ public void actionPerformed(final ActionEvent e){ if(e.getSource() == left){ if(youx >0)youx -= mv; } if(e.getSource() == right){ if(youx < 365)youx += mv; } if(e.getSource() == ban){ shot = true; } if(gamest == false){ if(e.getSource() == start){ gamest = true; //初期値 mezanki = pm; youzanki = py; nowbullet = pn; score = ps; } } else{ } requestFocus(); } }//ActionListener // スレッドクラスの継承 public class MyPicture extends Thread { // 座標 int picx = 0, picy = 0; // オブジェクト名 char myname; // 方向 boolean picv = true, pich = true; // コンストラクタ 座標初期値とオブジェクト名を設定 public MyPicture(final int x, final int y, final char z) { picx = x; picy = y; myname = z; } // 画像の(移動)runメソッド public void run() { int timer =0; try { while (true) { if(gamest == true){//if sleep(vme); if (myname == 'm') {//m // 水平移動 して壁に当たったら反転 if ( pich ) { picx += mv; } else { picx -= mv; } if ( picx > 360 ) {//全体が写るように pich = !pich; } if ( picx < 0 ) { pich = !pich; } // オブジェクトごとに画像座標設定 if (myname == 'm') { mex = picx; mey = picy; } }//m if (myname == 'n'){//n timer++; //弾丸発射10カウントごと if(timer % 10 == 0){ bl1v = 5;//弾丸の速度 if(bl1x < 0){ bl1x = mex + 13; } } //弾丸の移動 if(bl1v != 0){ bl1y += 20; // 弾丸の落下速度 // 弾が画面下に到達したら弾未発射に戻す if (bl1y >= 250) { // 着弾判定 if ((bl1x >= youx) && (bl1x <= youx + 28)) { //スコアの変動 //score -= 5; youzanki--; } bl1v = 0; bl1x = -10; bl1y = -10; if(youzanki == 0){ gamest = false; } } } }//n if(myname == 'y'){//y //左移動 if(moveleft == true){ if(youx >0){//稼働領域左端限界値 youx -= mv; } } //右移動 if(moveright == true){ if(youx < 365){//稼働領域右端限界値 youx += mv; } } }//y if(myname == 'q'){//q //弾丸発射 if(shot == true && bl2x < 0 && nowbullet > 0){ bl2v = 5; nowbullet --; score-= 2; bl2x = youx + 13; bl2y = youy; shot = false; } //弾丸の移動 if(bl2v != 0){ bl2y -= 20;//弾丸の上昇速度 // 弾が画面上に到達したら弾未発射に戻す if (bl2y < -10) { // 着弾判定 if ((bl2x >= mex) && (bl2x <= mex + 28)) { //スコアの変動 score += 20; mezanki--; } bl2v = 0; bl2x = -10; bl2y = -10; if(mezanki == 0 ||nowbullet == 0 && bl2x < 0){gamest = false;} } } }//q }//if else{ //画像の座標 mex = 250; mey = 0; youx = 0; youy = 245; bl1v = 0; bl1x = -10; bl1y = -10; bl2v = 0; bl2x = -10; bl2y = -10; } repaint(); }//while }//try catch(final InterruptedException e) {} }//run }//画面移動クラス }//mygame

試したこと

JAppletをJPanelに変更して実行するも変化なしでした。
またネット上で見つかる記事をやれるだけ試しましたがうまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kaleidoscope

2020/07/25 16:09

「理想とする動き」が何で 「実際の動き」がどうなっているかを記載しなければわかりません。 実装している機能を一つづつたしかめて、動きのおかしいところを特定しなければなりません。
guest

回答1

0

ベストアンサー

次の変更で、自分と敵は動くようですが、

diff

1 import java.awt.*; 2 import java.awt.event.*; 3 4-/* 5-<applet code="MyGame.class" width = 400 height=400> 6-</applet> 7-*/ 8 9 //MyGameでピクチャを移動 10-public class MyGame extends JApplet{ 11+public class MyGame extends JFrame { 12 13 public static void main(final String[] args) { 14- final JFrame frame = new JFrame("game"); 15 16- final MyGame k = new MyGame(); 17- frame.add("Center", k); 18- frame.pack(); 19+ final MyGame frame = new MyGame(); 20+ frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 21 frame.setSize(450, 450); 22 frame.setVisible(true); 23- k.init(); 24- k.start(); 25+ frame.init(); 26 } 27============= 28- me = getImage(getDocumentBase(), "me.png"); 29- you = getImage(getDocumentBase(), "you.png"); 30- mebl = getImage(getDocumentBase(),"tama2.jpg"); 31- youbl = getImage(getDocumentBase(),"tama1.jpg"); 32+ me = Toolkit.getDefaultToolkit().getImage("me.png"); 33+ you = Toolkit.getDefaultToolkit().getImage("you.png"); 34+ mebl = Toolkit.getDefaultToolkit().getImage("tama2.jpg"); 35+ youbl = Toolkit.getDefaultToolkit().getImage("tama1.jpg");

投稿2020/07/26 01:18

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

narudo

2020/07/26 10:23

フレーム上にアプレットを追加するのではなくフレームとして動かすんですね、誤った認識をしていました。回答ありがとうございました。無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問