🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

XNA

Microsoft XNAとは、Microsoftによる.NETのゲーム開発を促進するプラットフォーム間フレームワークです。

Q&A

1回答

1904閲覧

敵は横に移動して画面端で折り返す

srp479

総合スコア4

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

XNA

Microsoft XNAとは、Microsoftによる.NETのゲーム開発を促進するプラットフォーム間フレームワークです。

0グッド

0クリップ

投稿2019/10/01 22:34

編集2019/10/01 23:49

c#で
画面端にとどけば次の弾が撃てる
敵は横に移動して画面端で折り返す
この2つの処理をしたくて1日考えていたのですが
今まで敵の処理はrandomを採用してきたので
全くわかりません
良ければ知恵をお貸しください

class GamePlay : IScene { private bool isEnd;//終了フラグ private InputState input; private CharacterControl characterControl; private Random rand = new Random(); protected bool isDead = false; public void Update() { if (Enemy.Length == 1) { isEnd = true; } if(characterControl.IsPlayerDead()) { isEnd = true; } if (rand.Next(60) == 0) { var position = new Vector2((Screen.Width + 32.0f), (float)rand.Next(45 - 40, Screen.Height - 50)); characterControl.Add(new Enemy(position)); } if (characterControl.IsPlayerDead()) { Initialize(); } characterControl.Update(); } public GamePlay(InputState input) { this.input = input; } public void Draw(Renderer renderer) { characterControl.Draw(renderer); { } //renderer.End(); } public void Shutdown() { } public void Initialize() { //シーン終了フラグを初期化 this.isEnd = false; characterControl = new CharacterControl(); characterControl.Initialize(); characterControl.Add(new Player(input)); } public bool IsEnd() { return this.isEnd; } public Scene Next() { return Scene.GameOver; } class CharacterControl { private LinkedList<Character> characters; public CharacterControl() { } public void Initialize() { if (characters != null) { characters.Clear(); } characters = new LinkedList<Character>(); } public bool Add(Character character) { characters.AddLast(character); return true; } public void Update() { foreach (Character c in characters) { c.Update(); } New(); Hit(); Remove(); } private void New() { var newCharacters = new List<Character>(); foreach (Character c in characters) { Character newCharacter = c.New(); if (newCharacter != null) { newCharacters.Add(newCharacter); } } foreach (Character c in newCharacters) { characters.AddLast(c); } } private void Hit() { foreach (Character c1 in characters) { foreach (Character c2 in characters) if (c1.Collision(c2)) { c1.Hit(c2); c2.Hit(c1); } } } private void Remove() { LinkedListNode<Character> node = characters.First; while (node != null) { LinkedListNode<Character> next = node.Next; if (node.Value.IsDead()) { characters.Remove(node); } node = next; } } public bool IsPlayerDead() { foreach (Character c in characters) { if (c is Player) { return false; } } return true; } public void Draw(Renderer renderer) { foreach (Character c in characters) { //renderer.Begin(); c.Draw(renderer); //renderer.Begin(); } } } class Enemy : Character { public Enemy(Vector2 position) : base("敵", new Vector2(350f, 50.0f), 32.0f) { } public override void Update() { position = position + new Vector2(-9.0f, 0.0f); if (position.X < (-9.0f - 55.0f)) { isDead = true; } } public override void Hit(Character character) { if (character is Bullet || character is Player) { isDead = true; } } public override Character New() { return null; } } abstract class Character { protected string name; protected Vector2 position; protected float radius; protected bool isDead = false; public abstract void Update(); public abstract void Hit(Character character); public abstract Character New(); public Character(string name, Vector2 position, float radius) { this.name = name; this.position = position; this.radius = radius; } public void Draw(Renderer renderer) { //renderer.Begin(); renderer.DrawTexture(name, position - new Vector2(radius, radius)); //renderer.End(); } public bool IsDead() { return isDead; } public bool Collision(Character character) { if (Vector2.Distance(this.position, character.position) <= (this.radius + character.radius)) { return true; } return false; } } } コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/10/01 22:44

コードを提示しましょう いきなり敵と言われても意味不明です
y_waiwai

2019/10/01 23:45

コードが見づらいので、質問を編集し、<code>ボタンで出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

Updateメソッドに

C#

1bool returned = false; 2bool canShoot = true;

を追加し、同じく

C#

1if(returned) 2{ 3 if(position.X < /*画面の左端の座標*/) 4 { 5 returned = false; 6 canShoot = true; 7 } 8 position = position + new Vector2(-9.0f, 0.0f); 9} 10else 11{ 12 if(position.Y > /*画面の右端の座標*/) 13 { 14 returned = true; 15 canShoot = true; 16 } 17 position = position + new Vector3( 9.0f, 0.0f); 18}

とすればいいのではないですか?(弾を打つ際はcanShootフラグがtrueであるか確認する処理も追加してください)

投稿2019/10/26 13:32

KanazawaKureha

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問