C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: スロットの参考サイト


(過去ログ 107 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■63860 / inTopicNo.1)  スロットの参考サイト
  
□投稿者/ hanako (4回)-(2012/10/21(Sun) 20:59:39)

分類:[Java] 

 今晩は。

 JAVAでスロットをつくりたいのですが、参考になるサイトを知っていたら教えて下さい。
引用返信 編集キー/
■63861 / inTopicNo.2)  Re[1]: スロットの参考サイト
□投稿者/ みきぬ (8回)-(2012/10/22(Mon) 10:42:04)
もしあなたが No63799No63821 と同じ人なら、あなたには無理だから諦めたほうがいいとしか言えない。
引用返信 編集キー/
■63864 / inTopicNo.3)  Re[2]: スロットの参考サイト
□投稿者/ 774RR (9回)-(2012/10/22(Mon) 11:37:16)
# まあ以前の質問も「質疑応答」になっていないので今回も期待しないが
Java の使い方について確認しておきたいなー

使い方1.
末端ユーザのマシンに JRE をインストールして、あなたの作ったプログラムを直接末端ユーザの手元で実行させたい。
こういう用途なら AWT や Swing を使って GUI 画面を出す、ということになる。

使い方2.
末端ユーザは InternetExplorer や Safari や Chrome や Opera といった Web User Agent を使う。
つまり、末端ユーザは特別なソフトをわざわざインストールしなくていい。
(たとえば、俺のマシンではセキュリティ担保のため JRE を削除してしまっている)
あなたは Web サーバ側のプログラムを Java で作る。
実際に UA 画面上にゲーム画面を出すのは Flash なり Ext js なりで Java ではない。

2012 年時点で 使い方1 の、クライアント java (用語が不適切だが) ってあまり流行していないんだ。
使い方2 のサーバーサイド java のほうが案件が多い。
だから以前の俺のコメントでも、使い方2を想定し CSS の話を出した。
両者は基礎設計のレベルでまったく異なるので、どっちかはっきりしないと具体的な話にならない。

どちらにしても「絵つきのリールが回転する画面を表示したい」のであれば、必要なのは
・GUI画面を表示する
・タイマー処理で一定間隔の画面更新を行う
・絵柄のビットマップを表示する(複数個表示できればリールに見える)
・キーやマウスの入力を受け取る(ことでリールを停める)
ということになる。

俺は Java は本職でないので、より詳しい人のコメントを待とう。
引用返信 編集キー/
■63866 / inTopicNo.4)  Re[3]: スロットの参考サイト
□投稿者/ howling (13回)-(2012/10/22(Mon) 12:56:58)
2012/10/22(Mon) 12:59:52 編集(投稿者)

>みきぬさん
まぁ、気持ちはわかりますけど、最初はこんな感じなのかもしんないですし、温かい目で見守ってあげてください…。

また、質問者様へ。
一応、こういうのって丸投げな質問に近いので、フツーは「そんなもん自分で探せよ」って言われちゃうと思います。
A「どうやればいいかわかんないから教科書ないの?」
B「いやそんな良い教科書ばっかりあると思ったら大間違いだろ、自分でどうにかしろよ」

少なくとも、「ここは調べたんですが、ここだけわからない」とか、
「こういう風にやると思っているけれども、間違っていないか」とかがあるべき姿なのかなと。
努力している感じが微塵も受けられないんですよ。いやまぁ私も質問する事が多いので何も言えませんが…。

さて、今回の話ですが…
サイトの紹介っていうのとはハズれていますが、自分なりに考えたアルゴリズムを書きます。
これで行く、行かないは自由ってことで。

以前の質問内容からして、きっとリールの回転部分を聞いていたんじゃないかなと。
回転部分ができているのであれば、きっとそれに即した画像とかもあるという前提で。
どういう形にすればスロットちっくに見える何かができると思いますか?
まずはアルゴリズムを自分で予測してみるのが大事だと思います。

1.レバーONでリールを回転させる。(メダルが入ってない時はONにならないようにする)
  この時に、同時に「何が当たるのか」を判定する。
2.キー入力操作が行われた時に、回転しているリールをボタンに合わせて1つずつ止める。
  止める時に、「何が当たったのか」によって止める位置を滑らせて、特定の出目にする。
  「何も当たらない」=「ハズレが当たった」と考えれば良いはず。
  ただし、滑らせるコマの最大値を決めておいて、
  その最大値でも「当たり」にならないのであれば、途中でストップさせる。

表示うんぬんで問題がある場合は、使用するテクスチャデータとかでなんとかするっていうのが一番楽といえば楽かなと。
多分UVの話とかしても、今はさっぱりでしょうし…。
やること自体は超単純なのですが、考えない人には無理(っていうのをみきぬさんは言いたいんだと思います)ですよ。
頑張ってください。ではでは。
引用返信 編集キー/
■63882 / inTopicNo.5)  Re[4]: スロットの参考サイト
□投稿者/ hanako (5回)-(2012/10/23(Tue) 21:16:20)
最初にイメージを描いてやると、あとから上書き回転しません。
最初のイメージを描いた「//の箇所」の工夫の仕方を他のプログラムを参考にしたかっただけですけど。

以外に皆さんのご意見って厳しいですネ!!
困ってるから皆さんのチョッとした助けが欲しいと、このサイトに来ただけなんですけど( ..)φ(-_-)/~~~ピシー!ピシー!

===========================================================================================================

public class Slot3 extends Applet implements ActionListener , Runnable
{
Image[] img1 = new Image[3] ;
Image[][] img2 = new Image[3][3] ;

Button sta ;
Button stp1 ;
Button stp2 ;
Button stp3 ;

Font font1 ;
Font font2 ;

Thread runner ;
int sleeptime = 300 ;

int frag1 = 0 ;
int frag2 = 1 ;
int frag3 = 2 ;

boolean rotate1 = false ;
boolean rotate2 = false ;
boolean rotate3 = false ;

Graphics g = getGraphics() ;

String cmd ;
int fr ;

public void init()
{
setLayout(null);

setBackground( new Color( 73 , 128 , 128 ) );
font1 = new Font( "Courier" , Font.BOLD , 30 ) ;

stp1 = new Button( "STOP1" ) ;
stp1.setBackground( new Color( 149 , 64 , 183 ) ) ;
stp1.setForeground(Color.yellow) ;
setFont( font1 );
add( stp1 ) ;
stp1.addActionListener( this ) ;
stp1.setBounds( 300 , 265 , 150 , 50 ) ;

stp2 = new Button( "STOP2" ) ;
stp2.setBackground( new Color( 0xC7,15,85 ) ) ;
stp2.setForeground(new Color(99,32,0xCC)) ;
add( stp2 ) ;
stp2.addActionListener( this ) ;
stp2.setBounds( 450 , 265 , 150 , 50 ) ;

stp3 = new Button( "STOP3" ) ;
stp3.setBackground(Color.orange) ;
stp3.setForeground( new Color( 80,00,80 ) ) ;
add( stp3 ) ;
stp3.addActionListener( this ) ;
stp3.setBounds( 600 , 265 , 150 , 50 ) ;

sta = new Button( "S T A R T" ) ;
font2 = new Font( "Serif" , Font.BOLD | Font.ITALIC , 40 ) ;
sta.setBackground(Color.magenta) ;
sta.setForeground(Color.cyan) ;
setFont(font2);
add( sta ) ;
sta.addActionListener( this ) ;
sta.setBounds( 300 , 325 , 450 , 50 ) ;

getImage1();
getImage2();
}

public void getImage1()
{
img1[0] = getImage( getDocumentBase() , "r0.jpg" ) ;
img1[1] = getImage( getDocumentBase() , "r1.jpg" ) ;
img1[2] = getImage( getDocumentBase() , "r2.jpg" ) ;
}

public void paint( Graphics g )
{
// g.drawImage( img1[0] , 300 , 100 , 150 , 150 , this ) ;
// g.drawImage( img1[1] , 450 , 100 , 150 , 150 , this ) ;
// g.drawImage( img1[2] , 600 , 100 , 150 , 150 , this ) ;
g.setColor(Color.red);
g.drawRect( 300 , 100 , 150 , 150 ) ;
g.drawRect( 450 , 100 , 150 , 150 ) ;
g.drawRect( 600 , 100 , 150 , 150 ) ;
}

public void getImage2()
{
for( int j = 0 ; j <= 2 ; j ++ )
{
for( int i = 0 ; i <= 2 ; i ++ )
{
img2[i][j] = img1[i] ;
img2[i][j] = img1[i] ;
img2[i][j] = img1[i] ;
}
}
}

public void run( )
{
while( runner != null)
{
if( rotate1 == true )
{
frag1 ++ ;
if( frag1 > 2 ) frag1 = 0 ;

try
{ dispImage1(frag1) ; }
catch(Exception e) { }

repaint();
}

if(rotate2 == true )
{
frag2 ++ ;
if( frag2 > 2 ) frag2 = 0 ;

try
{ dispImage2(frag2) ; }
catch(Exception e) { }

repaint();
}

if(rotate3 == true)
{
frag3 ++ ;
if( frag3 > 2 ) frag3 = 0 ;

try
{ dispImage3(frag3) ; }
// { g.drawImage(img2[2][frag3] , 600 , 100 , 150 , 150 , this ) ; }
catch(Exception e) { }

repaint();
}

try{ runner.sleep( sleeptime ) ; }
catch( Exception e ){ }
}
}

public void dispImage1( int i )
{
Graphics g = getGraphics() ;
fr = i;
g.drawImage(img2[fr][0] , 300 , 100 , 150 , 150 , this ) ;
}

public void dispImage2( int i )
{
Graphics g = getGraphics() ;
fr = i;
g.drawImage(img2[fr][1] , 450 , 100 , 150 , 150 , this ) ;
}


public void dispImage3( int i )
{
Graphics g = getGraphics() ;
fr = i;
g.drawImage(img2[fr][2] , 600 , 100 , 150 , 150 , this ) ;
}

//実行開始
public void start()
{
if( runner == null )
{
runner = new Thread( this ) ;
runner.start() ;
}
}

//実行停止
public void stop()
{
if(runner != null) runner = null ;
}

public void update( Graphics g )
{
paint(g);
}

//Actionevent
public void actionPerformed( ActionEvent ev )
{
// if(String cmd == ev.getActionCommand("S T A R T"))
// {sta_ActionPerformed(ev) ;}
Object obj = ev.getSource() ;

if(obj.equals(sta)) sta_ActionPerformed(ev) ;

else if(obj.equals(stp1)) stp1_ActionPerformed(ev) ;

else if(obj.equals(stp2)) stp2_ActionPerformed(ev) ;

else if(obj.equals(stp3)) stp3_ActionPerformed(ev) ;

System.out.println( "obj = sta" ) ;
}

public void sta_ActionPerformed(ActionEvent ev)
{
if( ( ! rotate1 ) && ( ! rotate2 ) && (! rotate3 ) )
{
rotate1 = rotate2 = rotate3 = true ;
}
}

public void stp1_ActionPerformed(ActionEvent ev) { rotate1 = false ; }
public void stp2_ActionPerformed(ActionEvent ev) { rotate2 = false ; }
public void stp3_ActionPerformed(ActionEvent ev) { rotate3 = false ; }
}

引用返信 編集キー/
■63885 / inTopicNo.6)  Re[5]: スロットの参考サイト
□投稿者/ howling (14回)-(2012/10/24(Wed) 10:43:56)
hanakoさん

javaはしっかりやってないので、自分なりにちょっと調べてみました。
上書きされないということから、最初は画面のクリアしてないんじゃないか?という予測のもとに。
repaintする前にクリアとか必要なのかな?と。
とりあえずこんなのが出てきました。

http://www.javadrive.jp/applet/thread/index5.html

で、内容を見ると、repaintメソッドは引数なしのメソッドで、
任意の位置に書くことで
最終的にprintメソッドが呼び出される、ということがわかりました。

同時に、printメソッド内で描画する引数はグローバルか何かにでもして、
どこかで更新する必要がある、と…。

見たところ、GetGraphicsしてる感じですが、
repaint内の処理では更新処理がされないような、固定値が入っていておかしいなぁと。

それと、dispImage1〜3の処理でも、
「最初にどのイメージを選択するのか」は変わるようになっていますが、
「イメージ内のどこからどこまでを表示する」というのは固定になっている気がします。
「画面のどこに表示するか」は固定で良いのですが。

確か以前にスロットみたいなのを作れ、と専門学校の授業で(懐かしいなぁ…)受けた時に、
しっかりピタッと絵柄が止まっている時はいいですが、
動いている時は次の絵柄の画像の下半分と、前の絵柄の上半分を表示する処理が必要だったなぁと。
とすると、仮にdispImage1〜3が各リールの表示をするメソッドならば、
その処理内でdrawImageは2回以上行われるのでは?

よくある感じのスロットなら、
if(Y座標の位置…どれだけリールが滑っているかで、上の絵柄を表示する)
drawImage(上の絵柄)

drawImage(真ん中の絵柄は必ず表示する)

if(Y座標の位置…どれだけリールが滑っているかで、下の絵柄を表示する)
drawImage(下の絵柄)

になるかと。
どう表示したいのかにもよるので、ここは場合によりけりですが。



引用返信 編集キー/
■63887 / inTopicNo.7)  Re[6]: スロットの参考サイト
□投稿者/ 財津 (1回)-(2012/10/24(Wed) 18:43:23)
>困ってるから皆さんのチョッとした助けが欲しいと、このサイトに来ただけなんですけど( ..)φ(-_-)/~~~ピシー!ピシー!

そうなんですよ。ここは、キビシイー
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -