首先您的一个思路是错误的
我知道多线程可以解决这一问题,但是我又不想用多线程。
如果您在这里使用了多线程
反而整体的思路以及实现过程纠错了
多线程的话您已经完全无法控制了
那么来看单线程
在您的描述中我无法确定您原本的思路是怎样是否是多线程等
所以在此处我假设:您的P1 P2 P3分别是3个线程线程名称就按照P1 P2 P3来命名吧
下来是实现
战斗线程必须是一个单独的线程例如 fight线程
OK在P1释放技能后战斗线程记录并且遍历数组询问P2变量是否有被动技能如果有
Fight线程挂起等待等待P2线程响应由于是在Fight自己的线程上等待,那么有足够的能力等待10S10S过了P2还未返回那么跳过P3作用方法同样
如果您还没明白,可以继续追问
提起飞行棋play,大家都知道,有人问Java编写飞行棋的程序段,另外,还有人想问飞行棋play是什么,你知道这是怎么回事?其实儿童飞行棋怎么玩用英语怎么说,下面就一起来看看Java编写飞行棋的程序段,希望能够帮助到大家!
飞行棋play
1、Java编写飞行棋的程序段
地图类:
packageqsfxq;
publicclassMap{飞行棋play贺峻霖。
int[]map=newint[];//对战地图啊~马嘉祺又多了一根手指。
int[]luckyTurn=;//幸运飞行棋play时代少年团。
int[]landMine=;//位置
int[]pause=;//暂停write as 飞行棋。
int[]timeTunnel=;//时空生成地图:文轩涨精装满肚子上学。
关卡代号为:1:幸运2:3:暂停4:时空0:普通publicvoidcreateMap(){
inti=0;
//在对战地图上设置幸运
for(i=0;i<luckyTurnlength;i++){飞行棋playTNT。
map[luckyTurn[i]]=1;//添加代码实现在对战地图上设置
for(i=0;i<landMinelength;i++){
map[landMine[i]]=2;//添加代码实现在对战地图上设置暂停
for(i=0;i<pauselength;i++){
map[pause[i]]=3;//添加代码实现在对战地图上设置时空
for(i=0;i<timeTunnellength;i++){
map[timeTunnel[i]]=4;/
显示地图关卡对应的图形教学play。
[email protected]
[email protected]
[email protected] as 情侣飞行棋。
[email protected]
[email protected] (inti,intindex,intplayerPos1,intplayerPos2){
Stringgraph=””;
//添加代码
if(playerPos1==index&&playerPos2==index){
graph=”@@”;elseif(playerPos1==index){领带play。
graph=”A”;elseif(playerPos2==index){
graph=”B”;else{开着直播做翔霖car文。
switch(i){
case0:
graph=”∷”;
break;5个人一起干宋亚轩和贺峻霖。
case1:
graph=”¤”;
break;贺峻霖跪射宋亚轩writeas。
case2:all霖被六个队友做。
graph=”★”;
break;
case3:
graph=”■”;TNT国王游戏车。
case4:祺鑫浴室镜子。
graph=”〓”;returngraph;/
输出地图的奇数行(第1、3行)河马的秘密河all霖直播。
[email protected]
[email protected]
[email protected] as 校霸含试管。
[email protected] (intstart,intend,intplayerPos1,intplayerPos2){刘耀文往马嘉祺里塞td。
//添加代码writeas贺峻霖插宋亚轩。
for(inti=start;i<=end;i++){
[i],i,playerPos1,playerPos2));/
输出地图的偶数行(第2行)严浩翔在水里把宋亚轩做了。
[email protected]
[email protected]
[email protected]
[email protected] (intstart,intend,intplayerPos1,intplayerPos2){
for(inti=end-1;i>=start;i–){
[i],i,playerPos1,playerPos2));/
输出地图的右竖列飞行棋all祺。
[email protected] 干丁程鑫writeas。
[email protected]
[email protected]
[email protected] (intstart,intend,intplayerPos1,intplayerPos2){祺鑫河马的秘密河振动棒。
for(inti=start;i<end;i++){
for(intj=28;j>0;j–){//输出29个空格
“”);[i],i,playerPos1,playerPos2));
;/
输出地图的左竖列
[email protected]
[email protected]
[email protected]
[email protected] (intstart,intend,intplayerPos1,intplayerPos2){
//添加代码
for(inti=start;i<end;i++){
[i],i,playerPos1,playerPos2));
;/
显示对战地图
[email protected]
[email protected] (intplayerPos1,intplayerPos2){
//显示地图行
showLine1(0,30,playerPos1,playerPos2);
//换行
//显示地图右竖行
showRLine(31,35,playerPos1,playerPos2);
//显示地图第二行
showLine2(35,66,playerPos1,playerPos2);
//换行
//显示地图左竖行
showLLine(66,69,playerPos1,playerPos2);
//显示地图第3行
showLine1(69,99,playerPos1,playerPos2);GAME类:
packageqsfxq;
importjavautil;
publicclassGame{
//声明地图
Mapmap=newMap();
//Mapmap;
intplayerPos1;
//声明对战中玩家2的当前位置
intplayerPos2;
//声明走或停标识设置
String[]goAndStop=newString[2];
//声明对战角色
String[]playerName=newString[2];初始化游戏的一局publicvoidinit(){
//创建Map对象
//生成地图
儿童飞行棋怎么玩用英语怎么说
mapcreateMap();
//设置玩家1起始位置
playerPos1=0;
//设置玩家2起始位置
playerPos2=0;
//记录玩家1下一次走或停
goAndStop[0]=”on”;
//设置玩家2下一次走或停
goAndStop[1]=”on”;/
开始游戏publicvoidstart(){
//调用初始化方法
init();
//显示游戏界面
mapshowMap(playerPos1,playerPos2);
“\n”);
“1、戴高乐2、3、4、巴顿\n”);
//角色设置
Scannerinput=newScanner(Systemin);
“1P选择人物:”);
introle=inputnextInt();
setRole(1,role);
booleanjudge=true;
“2P选择人物:”);
introle2=inputnextInt();
if(role2==role){
“角色重复,请重新选择人物!”);else{
setRole(2,role2);}while(judge==false);
//开始游戏
play();/
设置对战角色
[email protected] :玩家12:玩家2
[email protected] (intno,introle){
switch(role){
case1:
playerName[no-1]=”戴高乐”;
break;
case2:
//设置玩家名称为””
playerName[no-1]=””;
break;
case3:
//设置玩家名称为””
playerName[no-1]=””;
break;
case4:
//设置玩家名称为”巴顿”
playerName[no-1]=”巴顿”;
break;
default:
break;/
两人对战玩法publicvoidplay(){
“\n\n\n\n”);
“\n\n\n”);
“GameStart\n”);
“\n\n”);
//显示对战双方士兵样式
“^_^”+playerName[0]+”的士兵:A”);
“^_^”+playerName[1]+”的士兵:B\n”);
//显示对战地图
“\n图例:”+”■暂停¤幸运★〓时空∷普通\n”);
mapshowMap(playerPos1,playerPos2);
//游戏开始
intstep;//存储数目
while(playerPos1<99&&playerPos2<99){//有任何一方走到终点,跳出循环
//轮流掷
if(goAndStop[0]equals(“on”)){
//玩家1掷
step=throwShifter(1);//掷
“\n—————–“);//显示结果信息
“数:”+step);
playerPos1=getCurPos(1,playerPos1,step);//计算这一次移动后的当前位置
“\n您当前位置:”+playerPos1);
“对方当前位置:”+playerPos2);
“—————–\n”);
mapshowMap(playerPos1,playerPos2);//显示当前地图
if(playerPos1==99){//如果走到终点
break;//退出}else{
“\n”+playerName[0]+”停掷一次!\n”);//显示此次暂停信息
goAndStop[0]=”on”;//设置下次可掷状态”\n\n\n\n”);
if(goAndStop[1]equals(“on”)){
//玩家2掷
step=throwShifter(2);//掷
“\n—————–“);//显示结果信息
“数:”+step);
playerPos2=getCurPos(2,playerPos2,step);//计算这一次移动后的当前位置
“\n您当前位置:”+playerPos2);
“对方当前位置:”+playerPos1);
“—————–\n”);
mapshowMap(playerPos1,playerPos2);
if(playerPos2==99){//如果走到终点
break;//退出}else{
“\n”+playerName[1]+”停掷一次!\n”);//显示此次暂停信息
goAndStop[1]=”on”;//设置下次可掷状态”\n\n\n\n”);//游戏结束
“\n\n\n\n”);
“\n”);
“GameOver\n”);
“\n\n”);
judge();/
掷
[email protected]
[email protected] (intno){
//定义变量存储数目
intstep=0;
//提示玩家启动掷
“\n”);
“请输入任意键开掷!”);
Scannerinput=newScanner(Systemin);
inputnextInt();
//模拟掷:产生一个1~6的数字作为玩家掷的数目
Randomrandom=newRandom();
step=randomnextInt(5)+1;
returnstep;/
计算玩家此次移动后的当前位置
[email protected]
[email protected]
[email protected]
[email protected] (intno,intposition,intstep){
position=position+step;//次移动后的位置
if(position>=99){
;Scannerinput=newScanner(Systemin);
switch(mapmap[position]){//根据地图中的关卡代号进行判断
case0://走到普通格
if(position==playerPos2){//添加条件:玩家1与对方骑兵相遇
//添加代码实现:踩到对方,对方回到起点
playerPos2=0;
“:-D哈哈哈哈…踩到了!”);if(position==playerPos1){//添加条件:玩家2与对方骑兵相遇
//添加代码实现:踩到对方,对方回到起点
playerPos1=0;
“:-D哈哈哈哈…踩到了!”);break;
case1://幸运
“\n◆◇◆◇◆欢迎进入幸运◆◇◆◇◆”);
“请选择一种运气:”);
“1位置2轰炸”);
“=============================\n”);
intchoice=inputnextInt();
inttemp;//时的临时变量
switch(choice){
case1://位置
if(no==1){
//添加代码实现:position与playerPos2数值互换
temp=playerPos2;
playerPos2=position;
position=temp;
}elseif(no==2){
//添加代码实现:position与playPos1数值互换
temp=playerPos1;
playerPos1=position;
position=temp;break;
case2://轰炸
if(no==1){//no为1并且玩家2位置小于6
//添加代码实现:计算玩家2当前位置
if(playerPos2<6){
playerPos2=0;else{
//添加代码实现:计算玩家2当前位置
playerPos2-=6;if(no==2){//no为2并且玩家1位置小于6
//添加代码实现:计算玩家1当前位置
if(playerPos1<6){
playerPos1=0;else{
//添加代码实现:计算玩家1当前位置
playerPos1-=6;break;break;
case2://踩到
//添加代码实现:踩到退6步
position-=6;
“~:-(“+”踩到,气死了…”);
break;
case3://下一次暂停一次
//添加代码实现:设置下次暂停掷
goAndStop[no-1]=”off”;
“~~>_<~~要停战一局了。");
break;
case4://时空
//添加代码实现:进入时空,加走10步
position+=10;
“|-P”+”进入时空,真爽!”);
break;//返回此次掷后玩家的位置坐标
if(position<0){
return0;
}elseif(position>99){
}else{
returnposition;/
显示对战结果publicvoidjudge(){
//添加代码
if(playerPos1>playerPos2){
[0]+”了胜利!”);else{
[1]+”了胜利!”);}
程序入口:
packageqsfxq;
publicclassStartGane{
publicstaticvoidmain(String[]args){
Gamegame=newGame();
gamestart();
原来棋子显示正常,而设置背景后,看不到棋子,应该是每次的窗口重画或背景的重画会擦掉原来的棋盘,你应该把画棋子这些以有关的函数都写到onpaint 或ondraw函数里,这样,在每次窗口重画时棋子会一起重画,就不会被背景挡住了
以上就是关于【请教】游戏中玩家对战时如何在程序中控制的问题!!!全部的内容,包括:【请教】游戏中玩家对战时如何在程序中控制的问题!!!、飞行棋play,Java编写骑士飞行棋的程序段、在MFC中,怎么样在有背景图的情况下显示图片我编写了一个人对战五子棋程序,但是添加背景图后不显示棋子等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)