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

  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。。。。

时间: 2024-10-06 13:59:06

15/6/10 sanguosha多玩家线程的调换的相关文章

centos7 + Apache2.4 + python3.5 +mod_wsgi4.5.15 + Django1.10安装指导

本文指导安装Python3.5, mod_wsgi4.5.15, Django1.10,以及安装过程中可能出现的问题及解决方法. 操作系统不局限于centos,大多数linux操作系统都适用.其他版本的操作系统出现问题的解决思路和方法基本是一样的...开始... 1. 安装Apache2.4 如果是Centos7版本,默认使用yum安装之后的apache就是2.4版本了,建议安装最新版本.因为我们后续要安装mod_wsgi,它依赖apache的开发库和Python的开发库,所以也要顺带安装apa

openfire+asmack搭建的安卓即时通讯(四) 15.4.10

之前的教程不知道你们成功了没,,,没成功可以问我啊=-= 第四篇博文是要实现发送消息的功能. 首先在我们登陆后的活动的layout里添加这样的两个控件,一个EditText和一个Button用于发送数据 1 <EditText android:id="@+id/edit_text_out" 2 android:layout_width="0dp" 3 android:layout_height="wrap_content" 4 androi

建立一个每隔10秒执行的线程

//线程类 public class TestThread extends Thread {     public void run() {         while(true){             try {                 sleep(6*1000);                                 //这里可以写你自己要运行的逻辑代码                 System.out.println("一分钟运行一次");       

第一次冲刺(3)15/5/10

昨天完成任务: 1.学会了创建.xml文件 2.知道.java文件和.xml是如何联系的. 3.创建类时需要在festmainjava.xml中注册 今天需要的完成的任务: 1.对我们大冒险游戏进行页面布局设计 昨天未完成的任务: 1.没有看视频学习.

10 UI线程阻塞及其优化

1.button1移动30次的小动画: Ui_thread01Activity.java: public class Ui_thread01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2,…) 请你求出这个序列的第N项的值(用10进制数表示)。 例如,对于k=3,N=100,正确答案应该是9

只有1行,为2个正整数,用一个空格隔开: k N (k.N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000). 计算结果,是一个正整数(在所有的测试数据中,结果均不超过2.1*10^9).(整数前不要有空格和其他符号). #include<stdio.h> int n2[1010];long long l1 = 1; long long n, k; long long sm(long long i,long long k) { long long s = 1; int j; fo

Java__线程---基础知识全面实战---坦克大战系列为例

今天想将自己去年自己编写的坦克大战的代码与大家分享一下,主要面向学习过java但对java运用并不是很熟悉的同学,该编程代码基本上涉及了java基础知识的各个方面,大家可以通过练习该程序对自己的java进行一下实战. 每个程序版本代码中,都附有相关注释,看完注释大家就可以对本程序设计有个很明显的思路.真的很有趣,想对java重新温习的同学完全不必再对厚厚的java基础书籍进行阅读了,在跟着本次代码练习并分析后,大家一定会对java各方面基础知识 尤其是线程的知识有更深一步的了解!!! 本次坦克大

更加强健的线程模型,解决线程卡死,退出异常情况

线程模型 1 package net.sz; 2 3 import java.util.Random; 4 import java.util.concurrent.ConcurrentLinkedQueue; 5 import org.apache.log4j.Logger; 6 7 /** 8 * 9 * <br> 10 * author 失足程序员<br> 11 * mail [email protected]<br> 12 * phone 13882122019&

Linux 桌面玩家指南:16. 使用 CUDA 发挥显卡的计算性能

特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之间的内容按照数学公式进行排版,从而导致评论区格式混乱.如果大家的评论中用到了$,但是又不是为了使用数学公式,就请使用\$转义一下,谢谢. 想从头阅读该系列吗?下面是传送门: Linux 桌面玩家指南:01. 玩转 Linux 系统的方法论 [约 1.1 万字,22 张图片] Linux 桌面玩家指南