質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
C#

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

Q&A

2回答

836閲覧

初見です。プログラミング歴が2か月の超初心者です。Windowsアプリのソースコードについて質問です。

ducati.1198s

総合スコア0

C#

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

0グッド

1クリップ

投稿2024/04/16 14:58

「あっち向いてホイ」ゲームのソースコードをサクラエディタで書いています。
完成後は、ビジュアルスタジオコード2022に貼り付けてソリューションのリビルドの後にデバック開始をする
予定です。
もちろん、必要な画像は既にファイル内に用意してあります。
途中まで完成しているのですが最後の部分が書けなくて悩んでいます。
このゲームの全体の構図としては、コンピューター側の指の画像1枚とプレイヤー側の指の画像4枚で
スタートボタンを押すとコンピューター側の指の画像が回転し始めプレイヤーが4枚の
上向きの指の画像、下向きの指の画像、左向きの指の画像、右向きの指の画像の中より1枚を選択すると
勝敗が確定して「あなたの勝ちです!」または「あなたの負けです!」が画面に表示されるという流れです。

実現したいこと

現時点では、スタートボタンを押してコンピューター側の指の画像が回転するまでは完成していて
残りは、コンピューター側の指の画像とプレイヤー側の画像が違うなら「あなたの勝ちです!」と表示され、
コンピューター側の指の画像とプレイヤー側の画像が同じなら「あなたのまけです!」と表示させたいのです。
ただ、それだけのゲームと呼べるものではありませんが最後まで完成させたいです。
どうか、ご教示ください。

該当のソースコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace RockPaperScissors
{
/// <summary>
/// あっち向いてほいゲーム
/// </summary>
public partial class Form1 : Form
{
int INTERVAL_TIME = 100;

const string CpuHand0ImageFile = "Hand0.png"; const string CpuHand1ImageFile = "Hand1.png"; const string CpuHand2ImageFile = "Hand2.png"; const string CpuHand3ImageFile = "Hand3.png"; int counter = 0; /// <summary> /// コンストラクタ /// </summary> public Form1() { InitializeComponent(); } /// <summary> /// ロード /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { // タイマーインターバル(1000で1秒) Timer1.Interval = INTERVAL_TIME; PicCPU.Image = Image.FromFile(CpuHand0ImageFile); } /// <summary> /// タイマーを動かす /// </summary> private void GameStart() { Timer1.Enabled = true; //counter = 0; } /// <summary> /// コンピュータの絵をまわす /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Timer1_Tick(object sender, EventArgs e) { //cpuResult = (JankenType)rdm.Next(0, 3); if (counter == 0) { PicCPU.Image = Image.FromFile(CpuHand0ImageFile); } if (counter == 1) { PicCPU.Image = Image.FromFile(CpuHand1ImageFile); } if (counter == 2) { PicCPU.Image = Image.FromFile(CpuHand2ImageFile); } if (counter == 3) { PicCPU.Image = Image.FromFile(CpuHand3ImageFile); } counter++; if (counter > 3) counter = 0; } /// <summary> /// スタートボタンクリック時の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StartButton_Click(object sender, EventArgs e) { GameStart(); } }

}

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

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

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

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

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

TN8001

2024/04/16 16:27 編集

> ゲームのソースコードをサクラエディタで書いています。 > 完成後は、ビジュアルスタジオコード2022に貼り付けて なんでサクラエディタなんでしょうか? 提示コードにはコントロール類の配置がないですが、Designer.csも手書きということですか?? > プレイヤーが4枚の上向きの指の画像、下向きの指の画像、左向きの指の画像、右向きの指の画像の中より1枚を選択する PictureBoxかなんかに画像があって、それをユーザーがクリック(選択)するんですよね? クリックイベントでタイマーを止めて判定すればよさそうですが、どこに詰まっていますか?
m.ts10806

2024/04/17 00:36 編集

始めからVisual Studio Codeで作らないのはどういう意図や経緯でしょうか。 GUIではなくCUIということ?と思ったら StartButton_Click とちゃんとボタンのクリックイベント拾うように作られてるんですね。 タイトルも「何に詰まっているか」「何をしたいか」の要件を記載した方が良いと思います。質問タグだけで済む、内容がないタイトルになってるので。
YAmaGNZ

2024/04/17 01:49

C#だったらVisualStudioCodeよりVisualStudioのほうがいいのでは?
fana

2024/04/17 03:09 編集

> 最後まで完成させたいです 途中なのであれば,必要な要素を追加していけばよいのではないでしょうか. とりあえず「プレイヤーが4つのうちから1つを選択する」ための手段を用意することが絶対に必要だと思うので,それを追加してみてはどうですか? で,選択操作が成された際のイベントで勝敗判定をすれば良い. 例えば,選択手段が 4つのボタン とかで良いならば,「スタートボタン」と同様な実装作業を行うだけでしょうから簡単に済みそうですよね. どのボタンが押されたのかと,現在の counter の値とを付き合わせて判定するだけの話なのではないかと想像します. その他, * 「回転」を止める必要がありそうなので,然るべきタイミングで止める処理を行う * 勝敗結果の表示手段を追加し,前記勝敗判定の結果をそこに表示する * 各ボタンがその時々で 押せる/押せない みたいな話が必要なら追加する 等,とにかく不足している要素を1つずつ足していけばよいのではないかと.
ikedas

2024/04/17 09:55

これ、たぶん、 「『あっち向いてホイ』ゲームを作ってください」 「ソースコードをサクラエディタで書きます」 「完成後は、ビジュアルスタジオコード2022に貼り付けてソリューションのリビルドの後にデバック開始をしましょう」 「もちろん、必要な画像はあらかじめファイル内に用意しておいてくださいね」 と指示した方がいらっしゃるということではないですか。 もしもそうなら、その方に質問してください。またその方が多忙などで捕まらないのなら、同じように指示を受けて作業している方は周りにいませんか。その方でもいいので相談してみてください。 率直に言って、質問者さんに必要なのは極めて初歩的な知識なので、対面で手取り足取り教えてもらうのが一番効率的です。 逆に、ネット越しに顔の見えない相手から文章だけを介して教えてもらうのは、効率が悪すぎてほとんど無理なレベルです。
stdio

2024/04/18 06:24

上5件の意見と似ていますが、色々と足りない部分が多いように感じます。 C#ということで[緑のバイク](http://midorinobike.in.coocan.jp/CS/index.html)を参考に開発を進めてみてはいかがでしょうか?
fana

2024/04/18 10:38

> namespace RockPaperScissors という記述だけから勝手に想像するに,コレよりも前に ほとんど似たような別の物 を作った経験があるのではないかな? とか思う. 仮にそうであれば,その時と同様に作業を進めていけばいいのではなかろうか? という気がする.
guest

回答2

0

IDEのコード補完無しでC#のコードを書くのは割と面倒で、サクラエディタは非効率すぎるのでやめましょう。初心者なら尚更です。
VisualStudio2022があるなら、素直にそちらで書きましょう。

ただ、それだけのゲームと呼べるものではありませんが最後まで完成させたいです。
どうか、ご教示ください。

何が問題で完成できないのか、質問を具体的にしてください。
(〇〇というエラーが出ていてビルドが出来ない、実行すると〇〇というエラーが発生する等)
現状のままだと、質問ではなく只のコード作成依頼です。希望のコード作成して欲しいだけなら、お金を払ってプログラム作成を依頼するサイトがあるので、そういった所を利用するか、チャットAIにでも頼めばよいかと思います。

投稿2024/04/18 00:29

編集2024/04/18 00:38
nururi

総合スコア98

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

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

0

コメントに反応がなく詳細が不明なので、普通にVisual Studioを使用しました。

画像を用意するのが面倒なため文字で代用しましたが、ロジックは画像でも使えるはずです。

完成が目標のようなので、非常に冗長ですがわかりやすさを優先しました(個人的にはTimer1_Tick内のif羅列は配列を使用して、各Clickは共通のイベントハンドラで短縮したいところです)

cs:Form1.cs

1using System; 2using System.Windows.Forms; 3 4 5namespace Qb7ezl17qryp65r 6{ 7 public partial class Form1 : Form 8 { 9 private int counter = 0; 10 11 public Form1() 12 { 13 InitializeComponent(); 14 } 15 16 private void Timer1_Tick(object sender, EventArgs e) 17 { 18 if (counter == 0) 19 { 20 // 以下TextはすべてImageに置き換え 21 // 都度Image.FromFileするのは大変無駄なのと、 22 // ==判定できなくなるので同一のImageを使うようにする 23 //cpu.Image = up.Image; 24 25 cpu.Text = up.Text; 26 } 27 if (counter == 1) 28 { 29 cpu.Text = right.Text; 30 } 31 if (counter == 2) 32 { 33 cpu.Text = down.Text; 34 } 35 if (counter == 3) 36 { 37 cpu.Text = left.Text; 38 } 39 counter++; 40 if (counter > 3) counter = 0; 41 } 42 43 private void Button1_Click(object sender, EventArgs e) 44 { 45 timer1.Enabled = true; 46 } 47 48 private void Up_Click(object sender, EventArgs e) 49 { 50 if (timer1.Enabled == false) return; 51 52 timer1.Enabled = false; 53 54 if (cpu.Text != up.Text) MessageBox.Show("あなたの勝ちです!"); 55 else MessageBox.Show("あなたのまけです!"); 56 } 57 58 private void Right_Click(object sender, EventArgs e) 59 { 60 if (timer1.Enabled == false) return; 61 62 timer1.Enabled = false; 63 64 if (cpu.Text != right.Text) MessageBox.Show("あなたの勝ちです!"); 65 else MessageBox.Show("あなたのまけです!"); 66 } 67 68 private void Down_Click(object sender, EventArgs e) 69 { 70 if (timer1.Enabled == false) return; 71 72 timer1.Enabled = false; 73 74 if (cpu.Text != down.Text) MessageBox.Show("あなたの勝ちです!"); 75 else MessageBox.Show("あなたのまけです!"); 76 } 77 78 private void Left_Click(object sender, EventArgs e) 79 { 80 if (timer1.Enabled == false) return; 81 82 timer1.Enabled = false; 83 84 if (cpu.Text != left.Text) MessageBox.Show("あなたの勝ちです!"); 85 else MessageBox.Show("あなたのまけです!"); 86 } 87 } 88}

cs:Form1.Designer.cs

1namespace Qb7ezl17qryp65r 2{ 3 partial class Form1 4 { 5 /// <summary> 6 /// 必要なデザイナー変数です。 7 /// </summary> 8 private System.ComponentModel.IContainer components = null; 9 10 /// <summary> 11 /// 使用中のリソースをすべてクリーンアップします。 12 /// </summary> 13 /// <param name="disposing">マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param> 14 protected override void Dispose(bool disposing) 15 { 16 if (disposing && (components != null)) 17 { 18 components.Dispose(); 19 } 20 base.Dispose(disposing); 21 } 22 23 #region Windows フォーム デザイナーで生成されたコード 24 25 /// <summary> 26 /// デザイナー サポートに必要なメソッドです。このメソッドの内容を 27 /// コード エディターで変更しないでください。 28 /// </summary> 29 private void InitializeComponent() 30 { 31 this.components = new System.ComponentModel.Container(); 32 this.up = new System.Windows.Forms.Label(); 33 this.right = new System.Windows.Forms.Label(); 34 this.down = new System.Windows.Forms.Label(); 35 this.left = new System.Windows.Forms.Label(); 36 this.cpu = new System.Windows.Forms.Label(); 37 this.button1 = new System.Windows.Forms.Button(); 38 this.timer1 = new System.Windows.Forms.Timer(this.components); 39 this.SuspendLayout(); 40 // 41 // up 42 // 43 this.up.AutoSize = true; 44 this.up.Font = new System.Drawing.Font("MS UI Gothic", 60F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); 45 this.up.Location = new System.Drawing.Point(256, 36); 46 this.up.Name = "up"; 47 this.up.Size = new System.Drawing.Size(116, 80); 48 this.up.TabIndex = 0; 49 this.up.Text = "👆"; 50 this.up.Click += new System.EventHandler(this.Up_Click); 51 // 52 // right 53 // 54 this.right.AutoSize = true; 55 this.right.Font = new System.Drawing.Font("MS UI Gothic", 60F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); 56 this.right.Location = new System.Drawing.Point(314, 116); 57 this.right.Name = "right"; 58 this.right.Size = new System.Drawing.Size(116, 80); 59 this.right.TabIndex = 1; 60 this.right.Text = "👉"; 61 this.right.Click += new System.EventHandler(this.Right_Click); 62 // 63 // down 64 // 65 this.down.AutoSize = true; 66 this.down.Font = new System.Drawing.Font("MS UI Gothic", 60F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); 67 this.down.Location = new System.Drawing.Point(256, 196); 68 this.down.Name = "down"; 69 this.down.Size = new System.Drawing.Size(116, 80); 70 this.down.TabIndex = 2; 71 this.down.Text = "👇"; 72 this.down.Click += new System.EventHandler(this.Down_Click); 73 // 74 // left 75 // 76 this.left.AutoSize = true; 77 this.left.Font = new System.Drawing.Font("MS UI Gothic", 60F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); 78 this.left.Location = new System.Drawing.Point(192, 116); 79 this.left.Name = "left"; 80 this.left.Size = new System.Drawing.Size(116, 80); 81 this.left.TabIndex = 3; 82 this.left.Text = "👈"; 83 this.left.Click += new System.EventHandler(this.Left_Click); 84 // 85 // cpu 86 // 87 this.cpu.AutoSize = true; 88 this.cpu.Font = new System.Drawing.Font("MS UI Gothic", 60F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); 89 this.cpu.Location = new System.Drawing.Point(38, 116); 90 this.cpu.Name = "cpu"; 91 this.cpu.Size = new System.Drawing.Size(116, 80); 92 this.cpu.TabIndex = 4; 93 this.cpu.Text = "👆"; 94 // 95 // button1 96 // 97 this.button1.Location = new System.Drawing.Point(167, 320); 98 this.button1.Name = "button1"; 99 this.button1.Size = new System.Drawing.Size(75, 23); 100 this.button1.TabIndex = 5; 101 this.button1.Text = "スタート"; 102 this.button1.UseVisualStyleBackColor = true; 103 this.button1.Click += new System.EventHandler(this.Button1_Click); 104 // 105 // timer1 106 // 107 this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); 108 // 109 // Form1 110 // 111 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 112 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 113 this.ClientSize = new System.Drawing.Size(438, 376); 114 this.Controls.Add(this.button1); 115 this.Controls.Add(this.cpu); 116 this.Controls.Add(this.left); 117 this.Controls.Add(this.down); 118 this.Controls.Add(this.right); 119 this.Controls.Add(this.up); 120 this.Name = "Form1"; 121 this.Text = "Form1"; 122 this.ResumeLayout(false); 123 this.PerformLayout(); 124 125 } 126 127 #endregion 128 129 private System.Windows.Forms.Label up; 130 private System.Windows.Forms.Label right; 131 private System.Windows.Forms.Label down; 132 private System.Windows.Forms.Label left; 133 private System.Windows.Forms.Label cpu; 134 private System.Windows.Forms.Button button1; 135 private System.Windows.Forms.Timer timer1; 136 } 137}

アプリ動画

投稿2024/04/18 10:40

TN8001

総合スコア9326

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問