だから私は戦争と呼ばれるカードゲームを作っています.ルールは次のとおりです:
- プレイヤー 1 とプレイヤー 2 は、それぞれ q1 と q2 と呼ばれるカードの列を作ります。どちらのキューも空ではありません。プレイヤーは空のバトル スタック s1 と s2 も持っています。
- 各プレイヤーは自分のキューの前からカードを 1 枚取り除き、スタックの一番上に置きます。
- カードの額面が同じ場合、戦争が発生します。
- 各プレイヤーは追加で 3 枚のカードをキューから自分のスタックに移動し、一番上のカードの額面をもう一度確認します。これは数回発生する可能性があります。再び 3 へ。
- カードの値が等しくない場合、バトルは終了し、a を決定できます。
私が書かなければならない関数は start_battle.cと呼ばれ、私が思いついたロジックは次のとおりqueue_front
です。関数は既に記述されています。したがって、私の擬似コードは次のとおりです。queue_empty
stack_top
function start_battle(q1, q2, s1, s2, logfile)
warc=0
move front card of q1 to the top of s1
move front card of q2 to the top of s2
while (top cards of s1 and s2 have equal value
and both q1 and q2 are not empty)
for i=1 to 3
if q1 is not empty
move front card of q1 to the top of s1
endif
done
for i=1 to 3
if q2 is not empty
move front card of q2 to the top of s2
endif
done
done
return warc
私のコードは次のとおりです。
#include "libcardlist.h"
int start_battle(queue *q1, queue *q2, stack *s1, stack *s2, FILE *logfile){
int warc =0;
int i;
stack_push(s1, queue_front(q1));
stack_push(s2, queue_front(q2));
card c1 = stack_top(s1);
card c2 = stack_top(s2);
while (c1.face==c2.face&& queue_empty(q1)==0 && queue_empty(q2)==0) {
warc++;
for (i=0; i<3; i++) {
if(queue_empty(q1)==0){
stack_push(s1, queue_front(q1));
}
}
for (i=0; i<3; i++) {
if (queue_empty(q2)==0){
stack_push(s2, queue_front(q2));
}
}
}
return warc;
}
ああ、そして
typedef struct {
int face; /* 2-14 */
char suit; /* C H S D */
} card;
テストすると、コードが while ループで動かなくなってしまいました。修正を手伝ってもらえますか?