【最大10000ポイント】当たる!!質問投稿キャンペーン!

java初心者ですが・・・

こんにちは。
j趣味でプログラミングをしている者です。
以下のサイトを参考にして、
パックマン風のゲームを作っているのですが、
キー入力に対応してうまく画像が動いてくれません。
急に意図しないところに移動してしまいます。
http://www.crew.sfc.keio.ac.jp/~turkey/packman/

このサイトも途中までしかできていなくて、
関数的なものしかできないのですが・・・
このコードの悪い点を教えていただけないでしょうか。
あるいは、お手本を示していただけないでしょうか。
よろしくおねがいします。

public class disppack3 extends Applet
{
int ht, vt;
int new_ht, new_vt;
int kabesize;
Image img;

int[][] Wall = { // 画面のデータが入ります
};

public void init( )
{
setBackground( new Color( 0xaacbef) );
new_ht = 0; new_vt = 0;
ht = 10; vt = 9;
img = getImage( getCodeBase(), "packmanfuu2.jpg");
addKeyListener(
new KeyAdapter( )
{
public void keyPressed( KeyEvent e )
{
switch( e.getKeyCode() )
{
case KeyEvent.VK_RIGHT:
new_vt = vt + 1;
break;
case KeyEvent.VK_LEFT :
new_vt = vt - 1;
break;
case KeyEvent.VK_UP :
new_ht = ht -1;
break;
case KeyEvent.VK_DOWN :
new_ht = ht +1;
break;
default :
break;
}
if( Wall[new_ht][new_vt] == 1 )
{
ht= new_ht;
vt = new_vt;
}
repaint();
}
}
);
}
public void paint( Graphics g )
{
g.setColor( new Color( 0x454656));
for( int i=0;i<18;i++)
{
for( int j=0; j<18; j++)
{
if( Wall[i][j] == 0 )
{
g.fillRect( j * 40+20, i*40 + 20, 40, 40);
}
}
}
g.drawImage( img, vt* 40 + 20, ht*40+20, this );
}
}

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こちらに java ゲームのサンプルが色々とありますよ。


参考にしてはどうでしょうか。

http://d.hatena.ne.jp/aidiary/20040918/1251373370
    • good
    • 0
この回答へのお礼

さっそく回答していただきありがとうございます。
教えていただいたサイトを参考にさせていただきます。
貴重な時間を割いての回答、ありがとうございました。

お礼日時:2010/11/28 17:11

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q内部仕様、外部仕様

プログラミング初心者です。来週までにレポートを出さなければならないのですが外部仕様と、内部仕様は具体的にどのように書けばよいのでしょうか?

Aベストアンサー

外部仕様 (機能仕様書 etc)
・プログラムの簡易説明、マニュアルみたいなもの
・プログラミングの知識が無い人にもわかる内容
・UI(ユーザーインターフェース)主体の仕様
・画面上の項目の説明、操作方法などをまとめる
 (画像とか載せておくと良いかも)

内部仕様 (詳細仕様書、設計書 etc)
・プログラムの詳細設計書
・開発者向けの内容
・開発環境(条件)、クラス仕様、構成、アルゴリズム等の説明
・プログラムの内部動作について詳しくまとめる
 (これとソースコードがあればプログラムの中身が全部わかる、というくらいに)
・必要に応じてコンポーネント図やフローチャート等も書く


どちらの場合も、図や箇条書きを使ってわかりやすく説明しましょう。
1つの文が長くて読みにくいものはNGです。

QEclipseから実行すると画像が読み込まれない

下記のコードをEclipseから実行すると画像が読み込まれないのですが、コマンドプロンプトから実行すると画像が読み込まれます。

コードが同じなのに不思議です…。

原因はどんなことが考えられるのでしょうか?

class test extends JFrame{
public static void main(String args[]){
test frame = new test("タイトル");
frame.setVisible(true);
}

test(String title){
setTitle(title);
setBounds(100, 100, 500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p = new JPanel();

ImageIcon icon1 = new ImageIcon("img.jpg");
JLabel label1 = new JLabel(icon1);

p.add(label1);

Container contentPane = getContentPane();
contentPane.add(p, BorderLayout.CENTER);
}
}

下記のコードをEclipseから実行すると画像が読み込まれないのですが、コマンドプロンプトから実行すると画像が読み込まれます。

コードが同じなのに不思議です…。

原因はどんなことが考えられるのでしょうか?

class test extends JFrame{
public static void main(String args[]){
test frame = new test("タイトル");
frame.setVisible(true);
}

test(String title){
setTitle(title);
setBounds(100, 100, 500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_C...続きを読む

Aベストアンサー

パスが違ってるんだと思いますよー。
Eclipseは、プロジェクトを実行すると、作業ディレクトリのパスをワークスペースに設定しますよー。だから、ワークスペースのフォルダの中にファイルがないと読めませんよー。

実行構成のメニューを選んで、Javaアプリケーションの実行構成で、「引数」タブの作業ディレクトリのところを、そのファイルがある場所(たぶん、プロジェクト?)に変更して実行すれば、ちゃんと読めるはずですよー。

Qパックマンプログラム

パックマンプログラムを作っているんですが以下のように壁にぶつかってゲームオーバーになります。すべてのエサを食べさせたいんですがどのように以下のプログラムを改良すればいいですか?
map(MAPDATA型):マップの情報(通路・エさ・壁の位置)
p(POSITION型):プレイヤーの位置情報
e(POSITION型):モンスターの位置情報

0:通路
1:エサ
2:壁

プレイヤーのx座標:p.x,モンスターのy座標:e.y

MAP_WIDTH:マップの横幅 (19)
MAP_HEIGHT:マップの縦幅 (22)
NUM_FOOD:エサの最大数 (156)


#include <stdio.h>
#include "Info.h"
#include "math.h"

MOVEMENT playerAI(MAPDATA map, POSITION p, POSITION e)
{
if (abs(p.x - e.x) + abs(p.y - e.y) <= 2) { return UP; };

if (map[p.y][p.x + 1] == 1) { return RIGHT; }
else if (map[p.y + 1][p.x] == 1) { return DOWN; }
else if (map[p.y][p.x - 1] == 1) { return LEFT; }
else if (map[p.y - 1][p.x] == 1) { return UP; }
else { return STAY; }


Game.cpp
http://codepad.org/C2opgSUX

Red AI.cpp
http://codepad.org/zlwvnPTX

パックマンプログラムを作っているんですが以下のように壁にぶつかってゲームオーバーになります。すべてのエサを食べさせたいんですがどのように以下のプログラムを改良すればいいですか?
map(MAPDATA型):マップの情報(通路・エさ・壁の位置)
p(POSITION型):プレイヤーの位置情報
e(POSITION型):モンスターの位置情報

0:通路
1:エサ
2:壁

プレイヤーのx座標:p.x,モンスターのy座標:e.y

MAP_WIDTH:マップの横幅 (19)
MAP_HEIGHT:マップの縦幅 (22)
NUM_FOOD:エサの最大数 (156)


#include <stdio...続きを読む

Aベストアンサー

あなたは
「プログラムを作りたい」のですか?
「プログラムを作ってもらいたい」のですか?

「作ってもらいたい」のなら、ここではなく、依頼サイトへ行った方がいいです。

自分で作りたいのなら、もうちょっと自分でいろいろとやってみましょう。
書いてある通りに入力するだけでは、プログラミングは上達しません。



f (map[p.y][p.x + 1] == 1) { return RIGHT; }
else if (map[p.y + 1][p.x] == 1) { return DOWN; }
else if (map[p.y][p.x - 1] == 1) { return LEFT; }
else if (map[p.y - 1][p.x] == 1) { return UP; }
else { return STAY; }

これが、どんな意味だか理解できていますか?
できていないなら、まずは、理解できるまで基本を勉強してください。


これを日本語訳すれば

右に餌があったら 右に行く
そうではなく、 下に餌があったら 下に行く
そうではなく、 左に餌があったら 左に行く
そうではなく、 上に餌があったら 上に行く
そうでなかったら 留まる

です。
これをちょっと変えて

右に壁がなかったら 右に行く
そうではなく、 下に壁がなかったら 下に行く
そうではなく、 左に壁がなかったら 左に行く
そうではなく、 上に壁がなかったら 上に行く
そうでなかったら 留まる

とすれば、とりあえずは壁を避けることができます。
元のプログラムがどうして「○○に餌があったら」になっているかをよく考えれば、
「壁でなかったら」とはどう書けるか、わかるはずです。

あなたは
「プログラムを作りたい」のですか?
「プログラムを作ってもらいたい」のですか?

「作ってもらいたい」のなら、ここではなく、依頼サイトへ行った方がいいです。

自分で作りたいのなら、もうちょっと自分でいろいろとやってみましょう。
書いてある通りに入力するだけでは、プログラミングは上達しません。



f (map[p.y][p.x + 1] == 1) { return RIGHT; }
else if (map[p.y + 1][p.x] == 1) { return DOWN; }
else if (map[p.y][p.x - 1] == 1) { return LEFT; }
else if (map[p.y - 1][p.x] == 1) ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング