Skip to content
Extraits de code Groupes Projets
Valider ebe4c4e8 rédigé par Vany Ingenzi's avatar Vany Ingenzi
Parcourir les fichiers

Error fixing and players thread termination, added GUI delay

parent ab279a9a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -2,6 +2,7 @@ functor ...@@ -2,6 +2,7 @@ functor
import import
QTk at 'x-oz://system/wp/QTk.ozf' QTk at 'x-oz://system/wp/QTk.ozf'
Input Input
System
export export
portWindow:StartWindow portWindow:StartWindow
define define
...@@ -256,22 +257,29 @@ in ...@@ -256,22 +257,29 @@ in
of nil then skip of nil then skip
[] buildWindow|T then NewGrid in [] buildWindow|T then NewGrid in
NewGrid = {BuildWindow} NewGrid = {BuildWindow}
{Delay Input.guiDelay}
{TreatStream T NewGrid State} {TreatStream T NewGrid State}
[] initPlayer(ID Position)|T then NewState in [] initPlayer(ID Position)|T then NewState in
NewState = {DrawSubmarine Grid ID Position} NewState = {DrawSubmarine Grid ID Position}
{Delay Input.guiDelay}
{TreatStream T Grid NewState|State} {TreatStream T Grid NewState|State}
[] movePlayer(ID Position)|T then [] movePlayer(ID Position)|T then
{Delay Input.guiDelay}
{TreatStream T Grid {StateModification Grid ID State {MoveSubmarine Position}}} {TreatStream T Grid {StateModification Grid ID State {MoveSubmarine Position}}}
[] lifeUpdate(ID Life)|T then [] lifeUpdate(ID Life)|T then
{Delay Input.guiDelay}
{TreatStream T Grid {StateModification Grid ID State {UpdateLife Life}}} {TreatStream T Grid {StateModification Grid ID State {UpdateLife Life}}}
{TreatStream T Grid State}
[] putMine(ID Position)|T then [] putMine(ID Position)|T then
{Delay Input.guiDelay}
{TreatStream T Grid {StateModification Grid ID State {DrawMine Position}}} {TreatStream T Grid {StateModification Grid ID State {DrawMine Position}}}
[] removeMine(ID Position)|T then [] removeMine(ID Position)|T then
{Delay Input.guiDelay}
{TreatStream T Grid {StateModification Grid ID State {RemoveMine Position}}} {TreatStream T Grid {StateModification Grid ID State {RemoveMine Position}}}
[] surface(ID)|T then [] surface(ID)|T then
{Delay Input.guiDelay}
{TreatStream T Grid {StateModification Grid ID State RemovePath}} {TreatStream T Grid {StateModification Grid ID State RemovePath}}
[] removePlayer(ID)|T then [] removePlayer(ID)|T then
{Delay Input.guiDelay}
{TreatStream T Grid {RemovePlayer Grid ID State}} {TreatStream T Grid {RemovePlayer Grid ID State}}
[] explosion(ID Position)|T then [] explosion(ID Position)|T then
{TreatStream T Grid State} {TreatStream T Grid State}
...@@ -279,6 +287,8 @@ in ...@@ -279,6 +287,8 @@ in
{TreatStream T Grid State} {TreatStream T Grid State}
[] sonar(ID)|T then [] sonar(ID)|T then
{TreatStream T Grid State} {TreatStream T Grid State}
[] nil|T then
{TreatStream nil Grid State}
[] _|T then [] _|T then
{TreatStream T Grid State} {TreatStream T Grid State}
end end
......
...@@ -168,21 +168,21 @@ define ...@@ -168,21 +168,21 @@ define
% 5. [else] Broadcast the direction to the radio % 5. [else] Broadcast the direction to the radio
proc {TurnByTurn345 Players CurrentIndex} proc {TurnByTurn345 Players CurrentIndex}
CurrentPlayer={List.nth Players CurrentIndex} CurrentPlayer={List.nth Players CurrentIndex}
ID Pos Direction NewPlayers
fun{SetNbSurfaceOne Player} player(port:Player.port nbSurface:1) end fun{SetNbSurfaceOne Player} player(port:Player.port nbSurface:1) end
ID Pos Direction NewPlayers
in in
{Send CurrentPlayer.port move(ID Pos Direction)} {Send CurrentPlayer.port move(ID Pos Direction)}
case ID#Direction case ID#Direction
of null#_ then of null#_ then
%% 9. %% Go to step 9.
{TurnByTurn Players (CurrentIndex mod Input.nbPlayer)+1} {TurnByTurn Players (CurrentIndex mod Input.nbPlayer)+1}
[] _#surface then [] _#surface then
%% 9. %% Go to step 9.
NewPlayers={ModifyOnlyCurrent Players CurrentPlayer SetNbSurfaceOne} NewPlayers={ModifyOnlyCurrent Players CurrentPlayer SetNbSurfaceOne}
{Broadcast NewPlayers saySurface(ID)} {Send GUI_PORT surface(ID)} {Broadcast NewPlayers saySurface(ID)} {Send GUI_PORT surface(ID)}
{TurnByTurn NewPlayers (CurrentIndex mod Input.nbPlayer)+1} {TurnByTurn NewPlayers (CurrentIndex mod Input.nbPlayer)+1}
else else
%% 6. %% Go to step 6.
{Broadcast Players sayMove(ID Direction)} {Broadcast Players sayMove(ID Direction)}
{Send GUI_PORT movePlayer(ID Pos)} {Send GUI_PORT movePlayer(ID Pos)}
{TurnByTurn6 Players CurrentIndex} {TurnByTurn6 Players CurrentIndex}
...@@ -267,24 +267,27 @@ define ...@@ -267,24 +267,27 @@ define
% 4. [If surface] Restart the game after turnSurface delay % 4. [If surface] Restart the game after turnSurface delay
% 5. [else] Broadcast the direction to the radio % 5. [else] Broadcast the direction to the radio
% 6. Think % 6. Think
proc{Simultaneous3456 Player PlayersList} proc {Simultaneous3456 Player PlayersList}
ID Pos Direction ID Pos Direction
fun{DirectionOnSurface Player} player(port:Player.port nbSurface:1) end fun {DirectionOnSurface Player} player(port:Player.port nbSurface:1) end
in in
{Send Player.port move(ID Pos Direction)} {Send Player.port move(ID Pos Direction)}
case ID#Direction case ID#Direction
of null#_ then of null#_ then
% When player dead , restart the game for him % When Player Dead
% Go to 1.
{Simultaneous Player PlayersList} {Simultaneous Player PlayersList}
[] _#surface then [] _#surface then
{Broadcast PlayersList saySurface(ID)} {Broadcast PlayersList saySurface(ID)}
{Send GUI_PORT surface(ID)} {Send GUI_PORT surface(ID)}
{Delay Input.turnSurface * 100} {Delay Input.turnSurface * 1000}
% Go to 1.
{Simultaneous Player PlayersList} {Simultaneous Player PlayersList}
else else
{Broadcast PlayersList sayMove(ID Direction)} {Broadcast PlayersList sayMove(ID Direction)}
{Send GUI_PORT movePlayer(ID Pos)} {Send GUI_PORT movePlayer(ID Pos)}
{Delay Input.thinkMax * 100} {Delay Input.thinkMax * 100}
% Go to 7.
{Simultaneous78 Player PlayersList} {Simultaneous78 Player PlayersList}
end end
...@@ -309,7 +312,6 @@ define ...@@ -309,7 +312,6 @@ define
% 9. Submarine fire and/or explode an item % 9. Submarine fire and/or explode an item
% 10. Think % 10. Think
proc{Simultaneous91011 Player PlayersList} proc{Simultaneous91011 Player PlayersList}
ID KindFire ID KindFire
in in
...@@ -365,11 +367,10 @@ in ...@@ -365,11 +367,10 @@ in
%% Launch the game %% Launch the game
if Input.isTurnByTurn then if Input.isTurnByTurn then
{TurnByTurn PlayersList 1} {TurnByTurn PlayersList 1}
{System.show '----'}
else else
{List.forAll PlayersList proc{$ Player} thread {Simultaneous Player PlayersList} end end} {List.forAll PlayersList proc{$ Player} thread {Simultaneous Player PlayersList} end end}
end end
%% Termination %% Termination
{List.forAll PlayersList proc{$ Player} {Send Player.port nil} end } {List.forAll PlayersList proc{$ Player} {Send Player.port nil} end }
{Send GUI_PORT nil}
end end
...@@ -3,19 +3,19 @@ ...@@ -3,19 +3,19 @@
# noma1 : Ingenzi Vany 80461900 # noma1 : Ingenzi Vany 80461900
# noma2 : Hirwa Mihigo Olyvia 02701900 # noma2 : Hirwa Mihigo Olyvia 02701900
# ---------------------------- # ----------------------------
# TODO complete the header with your group number, your noma's and full names
# TODO write your makefile here
OZFILES=$(wildcard ./*.oz) OZFILES=$(wildcard ./*.oz)
OZEXEC=$(OZFILES:.oz=.ozf) OZEXEC=$(OZFILES:.oz=.ozf)
%.ozf:%.oz %.ozf:%.oz
@ozc -c $^ @ozc -c $^ 1> /dev/null 2>&1
.PHONY: compile
compile: $(OZEXEC)
.PHONY: runMain runMain: run clean
runMain: $(OZEXEC) run: compile
@ozengine ./Main.ozf @ozengine ./Main.ozf
clean: clean:
......
...@@ -2,7 +2,6 @@ functor ...@@ -2,7 +2,6 @@ functor
import import
Input Input
OS OS
System
export export
portPlayer:StartPlayer portPlayer:StartPlayer
define define
...@@ -128,7 +127,6 @@ define ...@@ -128,7 +127,6 @@ define
{NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems} {NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems}
else else
NewChargingItems={List.map State.chargingItems fun{$ Item} NewChargingItems={List.map State.chargingItems fun{$ Item}
{System.show Item}
if Item.charge==ToCharge.charge andthen {Record.label Item.fireItem}=={Record.label AfterCharge.fireItem} then AfterCharge if Item.charge==ToCharge.charge andthen {Record.label Item.fireItem}=={Record.label AfterCharge.fireItem} then AfterCharge
else Item end else Item end
end} end}
...@@ -323,7 +321,7 @@ define ...@@ -323,7 +321,7 @@ define
proc{DeadTreatStream Stream State} proc{DeadTreatStream Stream State}
case Stream case Stream
of nil|T then {System.show 'Seeker down'} skip of nil|T then skip
[] initPosition(ID Pos)|T then [] initPosition(ID Pos)|T then
ID=null ID=null
{DeadTreatStream T State} {DeadTreatStream T State}
...@@ -380,101 +378,70 @@ define ...@@ -380,101 +378,70 @@ define
proc{AliveTreatStream Stream State} proc{AliveTreatStream Stream State}
case Stream case Stream
of nil|T then {System.show 'Seeker down'} skip of nil|T then skip
[] initPosition(ID Pos)|T then NewState in [] initPosition(ID Pos)|T then NewState in
{System.show 'Player'#State.id.id#'received'#initPosition(ID Pos)}
NewState={HandleInitPosition State initPosition(ID Pos)} NewState={HandleInitPosition State initPosition(ID Pos)}
{System.show 'Player'#State.id.id#'replied'#initPosition(ID Pos)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] move(ID Pos Direction)|T then NewState in [] move(ID Pos Direction)|T then NewState in
{System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)}
NewState={HandleMove State move(ID Pos Direction)} NewState={HandleMove State move(ID Pos Direction)}
{System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] dive|T then %% Ignored [] dive|T then
{System.show 'Player'#State.id.id#'received'#dive}
{AliveTreatStream T State} {AliveTreatStream T State}
[] saySurface(ID)|T then %% Ignored [] saySurface(ID)|T then
{System.show 'Player'#State.id.id#'received'#saySurface(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMove(ID Direction)|T then NewState in %% Ignored [] sayMove(ID Direction)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMove(ID Direction)}
NewState={HandleSayMove State State.enemies sayMove(ID Direction) nil} NewState={HandleSayMove State State.enemies sayMove(ID Direction) nil}
{System.show 'Player'#State.id.id#'enemies'#NewState.enemies}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] isDead(Answer)|T then [] isDead(Answer)|T then
Answer=false Answer=false
{AliveTreatStream T State} {AliveTreatStream T State}
[] chargeItem(ID Item)|T then NewState in [] chargeItem(ID Item)|T then NewState in
{System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)}
NewState={HandleChargeItem State chargeItem(ID Item)} NewState={HandleChargeItem State chargeItem(ID Item)}
{System.show 'Player'#State.id.id#'replied'#chargeItem(ID Item)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] fireItem(ID KindFire)|T then NewState in [] fireItem(ID KindFire)|T then NewState in
{System.show 'Player'#State.id.id#'received'#fireItem(ID KindFire)}
NewState={HandleFireItem State fireItem(ID KindFire)} NewState={HandleFireItem State fireItem(ID KindFire)}
{System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] fireMine(ID Mine)|T then NewState in [] fireMine(ID Mine)|T then NewState in
{System.show 'Player'#State.id.id#'received'#fireMine(ID Mine)}
NewState={HandleFireMine State fireMine(ID Mine)} NewState={HandleFireMine State fireMine(ID Mine)}
{System.show 'Player'#State.id.id#'replied'#fireMine(ID Mine)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] sayCharge(ID KindItem)|T then %% Ignored [] sayCharge(ID KindItem)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMinePlaced(ID)|T then %% Ignored [] sayMinePlaced(ID)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMissileExplode(ID Pos Msg)|T then NewState in [] sayMissileExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMissileExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg} NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMissileExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState} if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end else {DeadTreatStream T NewState} end
[] sayMineExplode(ID Pos Msg)|T then NewState in [] sayMineExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMineExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg} NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMineExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState} if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end else {DeadTreatStream T NewState} end
[] sayPassingDrone(drone(row X) ID Answer)|T then [] sayPassingDrone(drone(row X) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(row X) ID Answer)}
ID=State.id ID=State.id
Answer=State.pos.x==X Answer=State.pos.x==X
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(row X) ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayPassingDrone(drone(column Y) ID Answer)|T then [] sayPassingDrone(drone(column Y) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)}
ID=State.id ID=State.id
Answer=State.pos.y==Y Answer=State.pos.y==Y
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayAnswerDrone(Drone ID true)|T then [] sayAnswerDrone(Drone ID true)|T then
{System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID true)}
if ID.id \= State.id.id then NewState in if ID.id \= State.id.id then NewState in
NewState={HandleSayAnswerDrone State State.droneLogs sayAnswerDrone(Drone ID true) nil} NewState={HandleSayAnswerDrone State State.droneLogs sayAnswerDrone(Drone ID true) nil}
{System.show 'Player'#State.id.id#'received'#NewState.droneLogs}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
else else
{AliveTreatStream T State} end {AliveTreatStream T State} end
[] sayAnswerDrone(Drone ID false)|T then %% Ignore [] sayAnswerDrone(Drone ID false)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID false)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayPassingSonar(ID Resp)|T then [] sayPassingSonar(ID Resp)|T then
ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y}) ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y})
{System.show 'Player'#State.id.id#'received'#sayPassingSonar(ID Resp)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayAnswerSonar(ID Answer)|T then %% Ignore [] sayAnswerSonar(ID Answer)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerSonar(ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore [] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayDamageTaken(ID Damage LifeLeft)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayDeath(ID)|T then NewState RemovedDeadEnemy in %% Ignore [] sayDeath(ID)|T then NewState RemovedDeadEnemy in %% Ignore
RemovedDeadEnemy={List.filter State.enemies fun{$ Enemy} Enemy.idNum \= ID.id end} RemovedDeadEnemy={List.filter State.enemies fun{$ Enemy} Enemy.idNum \= ID.id end}
NewState={NewRec State enemies RemovedDeadEnemy} NewState={NewRec State enemies RemovedDeadEnemy}
{System.show 'Player'#State.id.id#'received'#sayDeath(ID)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
end end
end end
......
...@@ -2,7 +2,6 @@ functor ...@@ -2,7 +2,6 @@ functor
import import
Input Input
OS OS
System
export export
portPlayer:StartPlayer portPlayer:StartPlayer
define define
...@@ -125,7 +124,6 @@ define ...@@ -125,7 +124,6 @@ define
{NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems} {NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems}
else else
NewChargingItems={List.map State.chargingItems fun{$ Item} NewChargingItems={List.map State.chargingItems fun{$ Item}
{System.show Item}
if Item.charge==ToCharge.charge andthen {Record.label Item.fireItem}=={Record.label AfterCharge.fireItem} then AfterCharge if Item.charge==ToCharge.charge andthen {Record.label Item.fireItem}=={Record.label AfterCharge.fireItem} then AfterCharge
else Item end else Item end
end} end}
...@@ -256,8 +254,8 @@ define ...@@ -256,8 +254,8 @@ define
proc{DeadTreatStream Stream State} proc{DeadTreatStream Stream State}
case Stream case Stream
of nil|T then {System.show 'Hunter down'} skip of nil|T then skip
[] initPosition(ID Pos)|T then [] initPosition(ID Pos)|T then
ID=null ID=null
{DeadTreatStream T State} {DeadTreatStream T State}
[] move(ID Pos Direction)|T then [] move(ID Pos Direction)|T then
...@@ -313,93 +311,64 @@ define ...@@ -313,93 +311,64 @@ define
proc{AliveTreatStream Stream State} proc{AliveTreatStream Stream State}
case Stream case Stream
of nil|T then {System.show 'Hunter down'} skip of nil|T then skip
[] initPosition(ID Pos)|T then NewState in [] initPosition(ID Pos)|T then NewState in
{System.show 'Player'#State.id.id#'received'#initPosition(ID Pos)}
NewState={HandleInitPosition State initPosition(ID Pos)} NewState={HandleInitPosition State initPosition(ID Pos)}
{System.show 'Player'#State.id.id#'replied'#initPosition(ID Pos)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] move(ID Pos Direction)|T then NewState in [] move(ID Pos Direction)|T then NewState in
{System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)}
NewState={HandleMove State move(ID Pos Direction)} NewState={HandleMove State move(ID Pos Direction)}
{System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] dive|T then %% Ignored [] dive|T then
{System.show 'Player'#State.id.id#'received'#dive}
{AliveTreatStream T State} {AliveTreatStream T State}
[] saySurface(ID)|T then %% Ignored [] saySurface(ID)|T then
{System.show 'Player'#State.id.id#'received'#saySurface(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMove(ID Direction)|T then NewState in %% Ignored [] sayMove(ID Direction)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMove(ID Direction)}
NewState={HandleSayMove State State.enemies sayMove(ID Direction) nil} NewState={HandleSayMove State State.enemies sayMove(ID Direction) nil}
{System.show 'Player'#State.id.id#'enemies'#NewState.enemies}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] isDead(Answer)|T then [] isDead(Answer)|T then
Answer=false Answer=false
{AliveTreatStream T State} {AliveTreatStream T State}
[] chargeItem(ID Item)|T then NewState in [] chargeItem(ID Item)|T then NewState in
{System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)}
NewState={HandleChargeItem State chargeItem(ID Item)} NewState={HandleChargeItem State chargeItem(ID Item)}
{System.show 'Player'#State.id.id#'replied'#chargeItem(ID Item)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] fireItem(ID KindFire)|T then NewState in [] fireItem(ID KindFire)|T then NewState in
{System.show 'Player'#State.id.id#'received'#fireItem(ID KindFire)}
NewState={HandleFireItem State fireItem(ID KindFire)} NewState={HandleFireItem State fireItem(ID KindFire)}
{System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] fireMine(ID Mine)|T then NewState in [] fireMine(ID Mine)|T then NewState in
{System.show 'Player'#State.id.id#'received'#fireMine(ID Mine)}
NewState={HandleFireMine State fireMine(ID Mine)} NewState={HandleFireMine State fireMine(ID Mine)}
{System.show 'Player'#State.id.id#'replied'#fireMine(ID Mine)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] sayCharge(ID KindItem)|T then %% Ignored [] sayCharge(ID KindItem)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMinePlaced(ID)|T then %% Ignored [] sayMinePlaced(ID)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMissileExplode(ID Pos Msg)|T then NewState in [] sayMissileExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMissileExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg} NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMissileExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState} if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end else {DeadTreatStream T NewState} end
[] sayMineExplode(ID Pos Msg)|T then NewState in [] sayMineExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMineExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg} NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMineExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState} if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end else {DeadTreatStream T NewState} end
[] sayPassingDrone(drone(row X) ID Answer)|T then [] sayPassingDrone(drone(row X) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(row X) ID Answer)}
ID=State.id ID=State.id
Answer=State.pos.x==X Answer=State.pos.x==X
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(row X) ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayPassingDrone(drone(column Y) ID Answer)|T then [] sayPassingDrone(drone(column Y) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)}
ID=State.id ID=State.id
Answer=State.pos.y==Y Answer=State.pos.y==Y
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayAnswerDrone(Drone ID Answer)|T then %% Ignore [] sayAnswerDrone(Drone ID Answer)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayPassingSonar(ID Resp)|T then [] sayPassingSonar(ID Resp)|T then
ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y}) ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y})
{System.show 'Player'#State.id.id#'received'#sayPassingSonar(ID Resp)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayAnswerSonar(ID Answer)|T then %% Ignore [] sayAnswerSonar(ID Answer)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerSonar(ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore [] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayDamageTaken(ID Damage LifeLeft)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayDeath(ID)|T then NewState RemovedDeadEnemy in %% Ignore [] sayDeath(ID)|T then NewState RemovedDeadEnemy in %% Ignore
RemovedDeadEnemy={List.filter State.enemies fun{$ Enemy} Enemy.idNum \= ID.id end} RemovedDeadEnemy={List.filter State.enemies fun{$ Enemy} Enemy.idNum \= ID.id end}
NewState={NewRec State enemies RemovedDeadEnemy} NewState={NewRec State enemies RemovedDeadEnemy}
{System.show 'Player'#State.id.id#'received'#sayDeath(ID)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
end end
end end
......
...@@ -2,7 +2,6 @@ functor ...@@ -2,7 +2,6 @@ functor
import import
Input Input
OS OS
System
export export
portPlayer:StartPlayer portPlayer:StartPlayer
define define
...@@ -202,7 +201,7 @@ define ...@@ -202,7 +201,7 @@ define
proc{DeadTreatStream Stream State} proc{DeadTreatStream Stream State}
case Stream case Stream
of nil|T then {System.show 'Random down'} skip of nil|T then skip
[] initPosition(ID Pos)|T then [] initPosition(ID Pos)|T then
ID=null ID=null
{DeadTreatStream T State} {DeadTreatStream T State}
...@@ -259,89 +258,61 @@ define ...@@ -259,89 +258,61 @@ define
proc{AliveTreatStream Stream State} proc{AliveTreatStream Stream State}
case Stream case Stream
of nil then {System.show 'Random down'} skip skip of nil|T then skip
[] initPosition(ID Pos)|T then NewState in [] initPosition(ID Pos)|T then NewState in
{System.show 'Player'#State.id.id#'received'#initPosition(ID Pos)}
NewState={HandleInitPosition State initPosition(ID Pos)} NewState={HandleInitPosition State initPosition(ID Pos)}
{System.show 'Player'#State.id.id#'replied'#initPosition(ID Pos)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] move(ID Pos Direction)|T then NewState in [] move(ID Pos Direction)|T then NewState in
{System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)}
NewState={HandleMove State move(ID Pos Direction)} NewState={HandleMove State move(ID Pos Direction)}
{System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] dive|T then %% Ignored [] dive|T then
{System.show 'Player'#State.id.id#'received'#dive}
{AliveTreatStream T State} {AliveTreatStream T State}
[] saySurface(ID)|T then %% Ignored [] saySurface(ID)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#saySurface(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMove(ID Direct)|T then %% Ignored [] sayMove(ID Direct)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayMove(ID Direct)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] isDead(Answer)|T then [] isDead(Answer)|T then
Answer=false Answer=false
{AliveTreatStream T State} {AliveTreatStream T State}
[] chargeItem(ID Item)|T then NewState in [] chargeItem(ID Item)|T then NewState in
{System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)}
NewState={HandleChargeItem State chargeItem(ID Item)} NewState={HandleChargeItem State chargeItem(ID Item)}
{System.show 'Player'#State.id.id#'replied'#chargeItem(ID Item)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] fireItem(ID KindFire)|T then NewState in [] fireItem(ID KindFire)|T then NewState in
{System.show 'Player'#State.id.id#'received'#fireItem(ID KindFire)}
NewState={HandleFireItem State fireItem(ID KindFire)} NewState={HandleFireItem State fireItem(ID KindFire)}
{System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] fireMine(ID Mine)|T then NewState in [] fireMine(ID Mine)|T then NewState in
{System.show 'Player'#State.id.id#'received'#fireMine(ID Mine)}
NewState={HandleFireMine State fireMine(ID Mine)} NewState={HandleFireMine State fireMine(ID Mine)}
{System.show 'Player'#State.id.id#'replied'#fireMine(ID Mine)}
{AliveTreatStream T NewState} {AliveTreatStream T NewState}
[] sayCharge(ID KindItem)|T then %% Ignored [] sayCharge(ID KindItem)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMinePlaced(ID)|T then %% Ignored [] sayMinePlaced(ID)|T then %% Ignored
{System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayMissileExplode(ID Pos Msg)|T then NewState in [] sayMissileExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMissileExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg} NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMissileExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState} if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end else {DeadTreatStream T NewState} end
[] sayMineExplode(ID Pos Msg)|T then NewState in [] sayMineExplode(ID Pos Msg)|T then NewState in
{System.show 'Player'#State.id.id#'received'#sayMineExplode(ID Pos Msg)}
NewState={HandleExplosion State ID Pos Msg} NewState={HandleExplosion State ID Pos Msg}
{System.show 'Player'#State.id.id#'replied'#sayMineExplode(ID Pos Msg)}
if NewState.life > 0 then {AliveTreatStream T NewState} if NewState.life > 0 then {AliveTreatStream T NewState}
else {DeadTreatStream T NewState} end else {DeadTreatStream T NewState} end
[] sayPassingDrone(drone(row X) ID Answer)|T then [] sayPassingDrone(drone(row X) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(row X) ID Answer)}
ID=State.id ID=State.id
Answer=State.pos.x==X Answer=State.pos.x==X
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(row X) ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayPassingDrone(drone(column Y) ID Answer)|T then [] sayPassingDrone(drone(column Y) ID Answer)|T then
{System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)}
ID=State.id ID=State.id
Answer=State.pos.y==Y Answer=State.pos.y==Y
{System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayAnswerDrone(Drone ID Answer)|T then %% Ignore [] sayAnswerDrone(Drone ID Answer)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayPassingSonar(ID Resp)|T then [] sayPassingSonar(ID Resp)|T then
ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y}) ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y})
{System.show 'Player'#State.id.id#'received'#sayPassingSonar(ID Resp)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayAnswerSonar(ID Answer)|T then %% Ignore [] sayAnswerSonar(ID Answer)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayAnswerSonar(ID Answer)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore [] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayDamageTaken(ID Damage LifeLeft)}
{AliveTreatStream T State} {AliveTreatStream T State}
[] sayDeath(ID)|T then %% Ignore [] sayDeath(ID)|T then %% Ignore
{System.show 'Player'#State.id.id#'received'#sayDeath(ID)}
{AliveTreatStream T State} {AliveTreatStream T State}
end end
end end
...@@ -352,6 +323,7 @@ define ...@@ -352,6 +323,7 @@ define
in in
{NewPort Stream Port} {NewPort Stream Port}
thread thread
{AliveTreatStream Stream '#'( id:id(id:ID color:Color name:player020hunter)
life:Input.maxDamage life:Input.maxDamage
pos:pt(x:0 y:0) pos:pt(x:0 y:0)
chargingItems:[ {GetNewChargeFireItem mine} {GetNewChargeFireItem missile} chargingItems:[ {GetNewChargeFireItem mine} {GetNewChargeFireItem missile}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter