2012-04-03 4 views
0

私はスペースインベーダーのクローンを作ることで自分のスキルを鍛えています。私は2日前に質問しました。それは解決され、私は多くの進歩を遂げました。私のスペースインベーダークローンに関する問題

侵略者が私の配列(ほとんどの侵略者を残した)のインデックス0から撃つだけで、すべてがうまく動作します。これのコードは、game1.csの344行目から始まる領域にあります。

侵入者もきれいに動く。それらは画面の端に当たってピクセルを下に移動し、反対方向に進みます。しかし、私が一番外側の侵略者を破壊すると、ゲームは依然として死んだ侵略者を認識します。

ゲームが突然画面の中央にある侵入者に、逆方向に移動するよう指示します。それはゲームをもう少しダイナミックにしますが、これは私の望む効果ではありません。運動のためのコードが同じ場所にある、

game1.csでライン344から始まるソースはここからダウンロードすることができます:最初の侵略者が撃つなぜ、ほとんどの場合、http://db.tt/1AodUfdS

+0

将来的にリンクの腐敗(または短縮サービスとアップロードサービスをブロックする企業のファイアウォールの背後にあるもの)に苦しんでいないように、関連するコードを質問に貼り付けてください。 – user7116

+0

私はそれを念頭に置いておきます。これは2回目の投稿です。コードとリンクの数を減らすために、もっと努力と時間をかけます。 – user1308880

答えて

1

の理由は、あなたが新しいを作成することです毎回ランダムなオブジェクト。これは、システム時刻で初期化されます。したがって、ループでは、ほとんどの乱数は等しくなります(システム時間がほぼ等しいため)。代わりに、ゲームの始めにランダムオブジェクトを作成します。

2つ目の問題:最初の(インデックス0)と最後の(インデックス10)のインベーダーを使用して、行が方向を変更するかどうかを判断します。あなたがテストを継続することができ、これらにより

var LeftMost = Type1Invaders.Where(i => i.invaderVis).FirstOrDefault(); 
var RightMost = Type1Invaders.Where(i => i.invaderVis).LastOrDefault(); 

:代わりに、表示されている最後の/最初の侵略者を使用しています。結果がnullの場合、行は空です。

+0

非常に役に立ちます。私はそれらのロジックエラーをどこで見ているのか分かります。それはすべて役に立ちます。 :) ありがとうございました。 – user1308880