JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 新手剛接觸java
saes0001





發文: 6
積分: 0
於 2015-06-20 12:52 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
想要請問各位大大一下,因為我現在正在寫象棋,寫到吃棋子的時候,都吃不下去,但是移動的時候可以,因為我的棋盤有用座標標記,棋子是用Jlabel存的,當移動到下一個新地點的時候會setIcon(null),然後再生成移動的棋子,但卻始終不行,是因為不能這樣使用嗎?

reply to postreply to post
作者 Re:新手剛接觸java [Re:saes0001]
as0955344054





發文: 107
積分: 0
於 2015-06-20 18:35 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可以的話把你的程式碼貼上來,不然不知道你的問題在哪

reply to postreply to post
作者 Re:新手剛接觸java [Re:as0955344054]
saes0001





發文: 6
積分: 0
於 2015-06-21 03:13 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for (int a = newx-1 ; a > getx ; a--){
    if (check[a][newy] == 1){
       if (check[newx][newy] == 1 && defaultPos[newx][newy]>7){
         grid[newx][newy].setIcon(null);  //被吃掉的棋子圖片要消失
         check[newx][newy] = 0;
         defaultPos[newx][newy] = 0;
         if (check[newx][newy] == 0){
             grid[getx][gety].setIcon(null);
       grid[newx][newy].setIcon(img);  //放下吃棋子的圖片
       grid[newx][newy].setHorizontalAlignment(SwingConstants.CENTER);
       check[newx][newy] = 1;
       check[getx][gety] = 0;
       defaultPos[newx][newy] = 6; //6號是黑包
       defaultPos[getx][gety] = 0;  
        }
     }
   }
}
這個是寫包的吃棋
defaultPos > 7 是紅色棋子
check = 1 代表有棋子 0 =  沒有棋子
grid 是用label存取棋子的圖片 
可是程式完全都進不來這裡


reply to postreply to post
作者 Re:新手剛接觸java [Re:saes0001]
bluewingsky





發文: 409
積分: 0
於 2015-06-21 06:50 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可以的話,盡量是放整個程式碼,畢竟你不知道真正的問題在哪裡,
有時候問題可能就出在別的地方,
放整個程式碼上來,別人也才方便幫你測試,可以更快找出問題。

題外話,建議你可以買遊戲動畫製作的書來看看,
它裡面會教怎麼用視窗的paint方法來繪圖,
自己設計動畫,做出遊戲效果,當然也包括直接貼圖片做移動。
這樣在設計上會更清楚,
用視窗元件來做遊戲動畫,感覺好像有點"重",
因為視窗元件的本意不是在做動畫的。


reply to postreply to post
作者 Re:新手剛接觸java [Re:bluewingsky]
as0955344054





發文: 107
積分: 0
於 2015-06-21 08:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
那請問你,如果是你做遊戲動畫繪大概用甚麼方式!?
目前我看到一本書他上面好像也是使用視窗原件來達成


reply to postreply to post
作者 Re:新手剛接觸java [Re:saes0001]
saes0001





發文: 6
積分: 0
於 2015-06-21 09:26 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不好意思,這裡補上程式碼的壓縮檔。
請問一下,有推薦的遊戲動畫製作的書嗎?

chess.rar (421.29k)


reply to postreply to post
作者 Re:新手剛接觸java [Re:saes0001]
bluewingsky





發文: 409
積分: 0
於 2015-06-22 06:19 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你寫的這種方式太過於複雜了,
不要說別人來看你的程式碼,
想必你自己回過頭看也會看到霧剎剎吧。

其一,太多重複性的程式碼,
其實可以寫成一個方法,需要時直接呼叫該方法,
這樣可以簡化程式碼,方便閱讀。

其二,遊戲執行的路線很模糊,
移動與吃子都寫在一起了,
以至於是要移動還是要吃子的判斷容易搞混。

你的問題應該是在要吃子時,被移動的判斷給限制住了,
因為不能往有子的方向移動,所以就無法過去吃子。

你的程式碼在1278行處,有一個判斷click==1的if,
做的是如果目前為沒有選取棋子的狀態所做的處理,
以便下一次點選可以移動棋子,
但是卻沒有處理到如果此次點選不是為了選取,而是要吃子的可能。
所以我在後面1286行處加入了else if,做為判斷此次點選是要吃子的處理,
然後把吃子相關的移動、吃子處理複製過來,
黑炮就可以直接跳過紅炮而吃掉紅馬了。

但是這不是很好的處理方法,
這是整個遊戲系統的問題,改起來可能是個大工程。

我以前剛開始寫小遊戲的時候也是這樣,
想到什麼寫什麼,越寫越多之後連我自己也不知道我在寫什麼,
但是寫久了,慢慢就會知道怎麼樣去"設計"可以讓程式碼更簡潔好懂,
往物件導向發展吧,會有幫助的。

書的話,我自己是用碁峯出版的"Java概論與實作-網路動畫遊戲入門程式"
裡面有教怎麼在視窗做2D、3D繪圖,還有教相關的事件處理,
也有一些簡單的小例子實作。
但是我覺得,你還是應該親自到書店去翻翻看,
確定是你想要的再買,像我自己是買了第三本遊戲動畫教學的書,
才買到這本用比較習慣。


reply to postreply to post
作者 Re:新手剛接觸java [Re:as0955344054]
bluewingsky





發文: 409
積分: 0
於 2015-06-22 06:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
as0955344054 wrote:
那請問你,如果是你做遊戲動畫繪大概用甚麼方式!?
目前我看到一本書他上面好像也是使用視窗原件來達成


用的方式我前面就有說了哦,
『它裡面會教怎麼用視窗的paint方法來繪圖,』
嚴格來說視窗或JPanel容器本身也算元件(Component),
但是是在這些容器上直接做動畫,
而不是用JLabel之類的去setIcon,
在paint方法中,會用Graphics來繪製,
Graphics有提供直接drawImage的方法,
就是直接把圖片畫在視窗容器上。
如果是透過JLabel.setIcon的方法,等於是把圖片放在元件上,
再把元件放到視窗上,中間就隔了一個多餘的視窗元件,
我想應該不會有比直接畫在視窗上有效率吧。

如果你真的有看過這本書可以介紹一下嗎?(我說真的)
我想知道他用這種方式做動畫的優勢是什麼。


reply to postreply to post
作者 Re:新手剛接觸java [Re:saes0001]
saes0001





發文: 6
積分: 0
於 2015-06-22 15:28 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感謝大大的相助,現在已經能夠吃棋子了,我也搞清楚我錯在哪裡了,我想在此請問一下大大,什麼是利用方法然後再呼叫呀?

reply to postreply to post
作者 Re:新手剛接觸java [Re:saes0001]
bluewingsky





發文: 409
積分: 0
於 2015-06-22 15:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
就是,假設你的程式碼有十種動作要做,
而這十種動作當中,一模一樣的程式碼就各有5行,
總共重覆了50行。

如果把這五行,寫在另外一個方法(method)裡,
那這十個動作需要這五行程式碼時,
只要呼叫這個方法(method)就可以了,
就不用一樣的程式碼每次用到就再寫一次。
這樣在閱讀程式碼上就會更簡單明瞭


reply to postreply to post
作者 Re:新手剛接觸java [Re:bluewingsky]
saes0001





發文: 6
積分: 0
於 2015-06-22 16:42 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
方法(method)是指說再創一個class,還是用public void ...() 然後再去呼叫嗎?

reply to postreply to post
作者 Re:新手剛接觸java [Re:bluewingsky]
as0955344054





發文: 107
積分: 0
於 2015-06-23 00:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
歐不好意思 妳之前的回文讓我以為只使用PAINT來做整個動畫遊戲
因為某些區塊動畫,或是圖片還是得用JPANEL包起來不然除了抓座標應該沒辦法做監聽事件吧?


reply to postreply to post
作者 Re:新手剛接觸java [Re:saes0001]
bluewingsky





發文: 409
積分: 0
於 2015-06-23 12:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
saes0001 wrote:
方法(method)是指說再創一個class,還是用public void ...() 然後再去呼叫嗎?


用public void ...() 就可以了


reply to postreply to post
作者 Re:新手剛接觸java [Re:bluewingsky]
saes0001





發文: 6
積分: 0
於 2015-06-24 15:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
謝謝大大,我大概了解意思了。

reply to postreply to post
» JWorld@TW »  Java 新手區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8