码迷,mamicode.com
首页 > 编程语言 > 详细

15/6/10 sanguosha多玩家线程的调换

时间:2015-06-10 18:39:02      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

  1. package sgs;
  2. import java.util.concurrent.locks.ReentrantLock;
  3. import sgs.GameThread;
  4. public class playerThread implements Runnable{
  5. public playerThread(int i) {
  6. // TODO Auto-generated constructor stub
  7. this.num=i;
  8. }
  9. public final int num;
  10. GameThread gt;
  11. static int total=5;
  12. String role;
  13. public volatile int HP; ///血量;
  14. ReentrantLock plrlock;
  15. public int lastloop=-1;
  16. @Override
  17. public void run() {
  18. // TODO Auto-generated method stub
  19. int time=0;
  20. while(true){
  21. plrlock=new ReentrantLock();
  22. plrlock.lock();
  23. //synchronized gt;
  24. try{
  25. if(lastloop!=num&&gt.loop==num){
  26. System.out.println("第"+num+"个玩家开始出牌");////出牌动作
  27. lastloop=num;
  28. }
  29. else if(time>=10000000){
  30. time=0;
  31. gt.loop=this.get_next_player();//下一位玩家;
  32. try {
  33. Thread.currentThread().sleep(100000000);
  34. } catch (InterruptedException e) {
  35. // TODO Auto-generated catch block
  36. e.printStackTrace();
  37. }
  38. }
  39. }
  40. finally{plrlock.unlock();}
  41. time++;
  42. //total++;
  43. /*try {
  44. Thread.currentThread().sleep(500);
  45. } catch (InterruptedException e) {
  46. // TODO Auto-generated catch block
  47. e.printStackTrace();
  48. }*/
  49. //total--;
  50. //System.out.println(Thread.currentThread().getName());//System.out.println(total);
  51. }
  52. }
  53. public int get_next_player(){
  54. return (gt.loop+1)%gt.player_num;
  55. }
  56. }技术分享

以上为玩家线程类,运行时出现问题:不能循环,顺序错误。

 6/10 解决:顺序错误:

  1. try{
  2. if(lastloop!=num&&gt.loop==num){
  3. System.out.println("第"+num+"个玩家开始出牌");////出牌动作
  4. lastloop=num;
  5. while(true){
  6. if(time>=10000000){
  7. time=0;
  8. System.out.println("第"+num+"个玩家弃牌");
  9. gt.loop=this.get_next_player();//下一位玩家;
  10. /*try {
  11. Thread.currentThread().sleep(1000);
  12. } catch (InterruptedException e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }*/
  16. break;
  17. }
  18. time++;
  19. }
  20. System.out.println("下一个玩家为"+gt.loop+"号"+"lastloop为"+lastloop);
  21. }

循环错因:lastloop未设成static。。。。

15/6/10 sanguosha多玩家线程的调换

标签:

原文地址:http://www.cnblogs.com/fuxiaoshenjian/p/4565945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!