*** 概要 ***
C#で麻雀ゲームを作る過程を公開する。この過程を通してC#のプログラムを学んで生きたいと思う。公開記録は要点のみになると思うので質問があれば書き宛先にメールをくださいHome > 滅茶遊楽
*** 1/17***
Vc#麻雀プログラム作成日記
1:現在の問題点(親が決まった後)
@ サイコロをもう一度振る
解決策
@ フォームをダブルクリックする回数に応じて処理を決める
追加変数 OyaName
Tumo_pos
Ba_Flag
たの関数内で使用するにはthis.cmdorderのようにして使う
Inputbox はbuttonで代替
Labelを2〜5追加それぞれの現在の場風を表示するため
ラベルを定義して親の位置を基準にして場かぜを表示
風牌の表示が起家が0,4からで解決
裏牌削除
1/14
1:牌の並べ方
牌の取る順序が時計回りなので上家の一番下のパイから順番に牌番号をつける
Static クラスが起動されたときにはじめに初期化されてプログラムが終わるまで初期化されることはない関数のとき
関数 裏画像消去()の修飾前置詞としてつける
変数の宣言
<データ型> <変数名>;
Swich~Case
Switch(データ)
{
Case データ1
Break;
}
Switch~caseは複数条件の場合
Case1:
Case 2:
I=18;
Break;
のようにケースの値は1個で複数同時に使えないためif~Elseif
を使用したほうがいい
変数
ローカル変数とフィールド
ローカル変数は宣言されたメソッドの中だけで有効であり呼び出し第1回だけ有効
フィールドはクラス全体でいつでも使える変数
条件式
かつ→&&
If(Pai_pos>=12 && pai_pos<=25){
*** コード ***
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;
using System.Collections;
using System.Reflection;
namespace wFA1
{
public partial class Form1 : Form
{
public int CmdOrder = 1;
int SaikoroA = 1;
int SaikoroB = 1;
int Oya_Pos = 1;
public int Ba_Flg=1;
public int Saikoro_Num = 1;
public string Ba_M_Kaze="東";
PictureBox oya_pict=new PictureBox();
Control[] KamiPict = new Control[18];
Control[] ToiPict = new Control[18];
Control[] SimoPict = new Control[18];
Control[] JibunPict = new Control[18];
Control[] Saikoro = new Control[3];
Control[] Ba_Kaze = new Control[4];
int Ura_Srl_No; //裏牌画像のシリアル番号
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
switch (CmdOrder)
{
case 1:
//サイコロ振りの場面
this.timer1.Enabled = true;
this.timer1.Interval = 10;
this.label1.Text = "止めるには画面をダブルクリックしてください";
break;
case 2:
//サイコロ振りの場面
this.timer1.Enabled = true;
this.timer1.Interval = 10;
this.label1.Text = "止めるには画面をダブルクリックしてください";
break;
case 3:
//配牌
for (int i = 1; i < 28; i++)
{
Ura_Srl_No = Ura_Srl_No + 1;
if (Ura_Srl_No == 69)
{
//'裏画像のシリアルナンバーが68を超えたら初期化する
Ura_Srl_No = 1;
}
裏画像消去(Ura_Srl_No);
}
break;
default:
break;
}
}
public void Frm_ini()
{
//--------------------------------
KamiPict[0]=this. pictureBox1;
// KamiPict[0] = this.pictureBox1;
KamiPict[1] = this.pictureBox2;
KamiPict[2] = this.pictureBox3;
KamiPict[3] = this.pictureBox4;
KamiPict[4] = this.pictureBox5;
KamiPict[5] = this.pictureBox6;
KamiPict[6] = this.pictureBox7;
KamiPict[7] = this.pictureBox8;
KamiPict[8] = this.pictureBox9;
KamiPict[9] = this.pictureBox10;
KamiPict[10] = this.pictureBox11;
KamiPict[11] = this.pictureBox12;
KamiPict[12] = this.pictureBox13;
KamiPict[13] = this.pictureBox14;
KamiPict[14] = this.pictureBox15;
KamiPict[15] = this.pictureBox16;
KamiPict[16] = this.pictureBox17;
//------------------------------------
ToiPict[0] = this.pictureBox18;
ToiPict[1] = this.pictureBox19;
ToiPict[2] = this.pictureBox20;
ToiPict[3] = this.pictureBox21;
ToiPict[4] = this.pictureBox22;
ToiPict[5] = this.pictureBox23;
ToiPict[6] = this.pictureBox24;
ToiPict[7] = this.pictureBox25;
ToiPict[8] = this.pictureBox26;
ToiPict[9] = this.pictureBox27;
ToiPict[10] = this.pictureBox28;
ToiPict[11] = this.pictureBox29;
ToiPict[12] = this.pictureBox30;
ToiPict[13] = this.pictureBox31;
ToiPict[14] = this.pictureBox32;
ToiPict[15] = this.pictureBox33;
ToiPict[16] = this.pictureBox34;
//---------------------------------
SimoPict[0] = this.pictureBox35;
SimoPict[1] = this.pictureBox36;
SimoPict[2] = this.pictureBox37;
SimoPict[3] = this.pictureBox38;
SimoPict[4] = this.pictureBox39;
SimoPict[5] = this.pictureBox40;
SimoPict[6] = this.pictureBox41;
SimoPict[7] = this.pictureBox42;
SimoPict[8] = this.pictureBox43;
SimoPict[9] = this.pictureBox44;
SimoPict[10] = this.pictureBox45;
SimoPict[11] = this.pictureBox46;
SimoPict[12] = this.pictureBox47;
SimoPict[13] = this.pictureBox48;
SimoPict[14] = this.pictureBox49;
SimoPict[15] = this.pictureBox50;
SimoPict[16] = this.pictureBox51;
// '---------------------------------------
JibunPict[0] = this.pictureBox52;
JibunPict[1] = this.pictureBox53;
JibunPict[2] = this.pictureBox54;
JibunPict[3] = this.pictureBox55;
JibunPict[4] = this.pictureBox56;
JibunPict[5] = this.pictureBox57;
JibunPict[6] = this.pictureBox58;
JibunPict[7] = this.pictureBox59;
JibunPict[8] = this.pictureBox60;
JibunPict[9] = this.pictureBox61;
JibunPict[10] = this.pictureBox62;
JibunPict[11] = this.pictureBox63;
JibunPict[12] = this.pictureBox64;
JibunPict[13] = this.pictureBox65;
JibunPict[14] = this.pictureBox66;
JibunPict[15] = this.pictureBox67;
JibunPict[16] = this.pictureBox68;
// '-------------------------------------
//サイコロ
Saikoro[0] = this.pictureBox69;
Saikoro[1] = this.pictureBox70;
// '---------------------------------------------
this.Top = 10;
this.Left = 10;
this.Width = 1300;
this.Height = 700;
this.BackColor = Color.DarkGreen;
int i;
//-------------------------------------------------
//パイの置き場所
//上家
for (i = 0; i <= 16; i++)
{
// KamiPict[i].Top= 610 - i * 26;
// KamiPict[i].Top = 100 + (i * 26);
KamiPict[i].Top= 550 - i * 30;
KamiPict[i].Left = 200;
KamiPict[i].Width = 50;
KamiPict[i].Height = 30;
KamiPict[i].BackgroundImage = Properties.Resources.KamiS;
}
// '------------------------------------------
//対面
for (i = 0; i <= 16; i++)
{
ToiPict[i].Top = 100;
///ToiPict[i].Left = 700 - (i * 26);
ToiPict[i].Left = 300 + (i * 26);
ToiPict[i].Width = 26;
ToiPict[i].Height = 52;
ToiPict[i].BackgroundImage = Properties.Resources.toimenS;
}
// '------------------------------------------
//下家
for (i = 0; i <= 16; i++)
{
SimoPict[i].Top = 100 + i * 26;
SimoPict[i].Left = 800;
SimoPict[i].Width = 50;
SimoPict[i].Height = 40;
SimoPict[i].BackgroundImage = Properties.Resources.SimoS;
}
//'-------------------------------------------------------
//起家
for (i = 0; i <= 16; i++)
{
JibunPict[i].Top = 500;
// JibunPict[i].Left = 250 + (i * 26);
JibunPict[i].Left = 700-(i * 26);
JibunPict[i].Width = 26;
JibunPict[i].Height = 40;
JibunPict[i].BackgroundImage = Properties.Resources.jibunS;
}
//--------------------------------------------------
//サイコロ
Saikoro[0].Top = 380;
Saikoro[0].Left = 400;
Saikoro[0].Width = 30;
Saikoro[0].Height = 30;
Saikoro[0].BackgroundImage = Properties.Resources._3;
Saikoro[1].Top = 370;
Saikoro[1].Left = 440;
Saikoro[1].Width = 30;
Saikoro[1].Height = 30;
Saikoro[1].BackgroundImage = Properties.Resources._4;
//-------------------------------------------------------
this.button1.Top = 30;
this.button1.Left = 1150;
this.button1.Width = 70;
this.button1.Text = "コマンド ";
//-------------------------------------------------
this.button2.Top = 100;
this.button2.Left = 1150;
this.button2.Width = 70;
this.button2.Text = " ";
this.button2.Visible = false;
//----------------------------------------------------
this.label1.Top = 10;
this.label1.Left = 930;
this.label1.Width = 150;
this.label1.Text = "コマンドをクリックしてください";
this.label1.BackColor = System.Drawing.Color.AntiqueWhite;
this.label1.Font = new Font("MS 明朝", 12, FontStyle.Bold);
//------------------------------------------
Image Oya_Kaze=Properties.Resources.eas;
oya_pict=pictureBox71;
oya_pict.Image=Oya_Kaze;
oya_pict.Visible=false;
//--------------------------------------
//場風の定義
// Label[] Ba_Kaze = new Label[4];
Ba_Kaze[0] = this.label2; //起家
Ba_Kaze[1] = this.label3; //下家
Ba_Kaze[2] = this.label4; //対面
Ba_Kaze[3] = this.label5; //上家
//起家
Ba_Kaze[0].Top = 600;
Ba_Kaze[0].Left = 850;
Ba_Kaze[0].Font = new Font("MS ゴシック", 10, FontStyle.Bold);
Ba_Kaze[0].ForeColor = Color.PaleGreen;
Ba_Kaze[0].Text = "1:東・東";
//下家()
Ba_Kaze[1].Top = 20;
Ba_Kaze[1].Left = 850;
Ba_Kaze[1].Font = new Font("MS ゴシック", 10, FontStyle.Bold);
Ba_Kaze[1].ForeColor = Color.PaleGreen;
Ba_Kaze[1].Text = "2:東・南";
//'対面()
Ba_Kaze[2].Top = 20;
Ba_Kaze[2].Left = 50;
Ba_Kaze[2].Font = new Font("MS ゴシック", 10, FontStyle.Bold);
Ba_Kaze[2].ForeColor = Color.PaleGreen;
Ba_Kaze[2].Text = "3:東・西";
//'上家()
Ba_Kaze[3].Top = 600;
Ba_Kaze[3].Left = 50;
Ba_Kaze[3].Font = new Font("MS ゴシック", 10, FontStyle.Bold);
Ba_Kaze[3].ForeColor = Color.PaleGreen;
Ba_Kaze[3].Text = "2:東・北";
}
private void Form1_Load(object sender, EventArgs e)
{
Frm_ini();
}
private void timer1_Tick(object sender, EventArgs e)
{
//--------------------------------------------------------------------------------
Bitmap bmp1 = Properties.Resources._1;
Bitmap bmp2 = Properties.Resources._2;
Bitmap bmp3 = Properties.Resources._3;
Bitmap bmp4 = Properties.Resources._4;
Bitmap bmp5 = Properties.Resources._5;
Bitmap bmp6 = Properties.Resources._6;
//-----------------------------------------------
Bitmap bmpb1 = Properties.Resources._1;
Bitmap bmpb2 = Properties.Resources._2;
Bitmap bmpb3 = Properties.Resources._3;
Bitmap bmpb4 = Properties.Resources._4;
Bitmap bmpb5 = Properties.Resources._5;
Bitmap bmpb6 = Properties.Resources._6;
Image[] bmps = new Image[6];
bmps[0] = bmp1;
bmps[1] = bmp2;
bmps[2] = bmp3;
bmps[3] = bmp4;
bmps[4] = bmp5;
bmps[5] = bmp6;
Random myRnd = new Random();
int i = myRnd.Next(5);
pictureBox69.Image = bmps[i];
//---------------------------------------------
Image[] bmpsb = new Image[6];
bmpsb[0] = bmpb1;
bmpsb[1] = bmpb2;
bmpsb[2] = bmpb3;
bmpsb[3] = bmpb4;
bmpsb[4] = bmpb5;
bmpsb[5] = bmpb6;
Random myRnd2 = new Random();
int i2 = myRnd2.Next(10);
if (i2 > 5)
{
i2 = i2 - 5;
}
pictureBox70.Image = bmpsb[i2];
SaikoroA = i + 1;
SaikoroB = i2 + 1;
//------------------------------------------------------------------------------------
}
public void Wnd_pos()
{
oya_pict.Visible=true;
switch(Oya_Pos){
//Oya_Posは0,4が起家、1:下家、2:対面、3:上家
case 4:
//起家
oya_pict.Top=600;
oya_pict.Left=800;
break;
case 1:
//下家
oya_pict.Top=10;
oya_pict.Left=800;
break;
case 2:
//対面
oya_pict.Top=10;
oya_pict.Left=10;
break;
case 3:
//上家
oya_pict.Top=600;
oya_pict.Left=10;
break;
default:
break;
}
}
private void Form1_DoubleClick(object sender, EventArgs e)
{
string OyaName="";
int Tumo_Pos=0;
switch (CmdOrder)
{
case 1:
this.timer1.Enabled = false;
this.label1.Text = "";
//サイコロの数字が確定
Oya_Pos = (SaikoroA + SaikoroB) % 4;
if (Oya_Pos == 0)
{
Oya_Pos = 4;
}
//親のかぜの場所を決める
Wnd_pos();
this.CmdOrder =2;
//親の場所確定に従って親の名前を決める
//label2は起家:3→下家:4→対面:5→上家
switch (Oya_Pos)
{
case 1:
OyaName = "下家";
label3.Text = this.Ba_M_Kaze + "東";
label4.Text = this.Ba_M_Kaze + "南";
label5.Text = this.Ba_M_Kaze + "西";
label2.Text = this.Ba_M_Kaze + "北";
break;
case 2:
OyaName = "対面";
label4.Text = this.Ba_M_Kaze + "東";
label5.Text = this.Ba_M_Kaze + "南";
label2.Text = this.Ba_M_Kaze + "西";
label3.Text = this.Ba_M_Kaze + "北";
break;
case 3:
OyaName = "上家";
label5.Text = this.Ba_M_Kaze + "東";
label2.Text = this.Ba_M_Kaze + "南";
label3.Text = this.Ba_M_Kaze + "西";
label4.Text = this.Ba_M_Kaze + "北";
break;
case 4:
OyaName = "起家";
label2.Text = this.Ba_M_Kaze + "東";
label3.Text = this.Ba_M_Kaze + "南";
label4.Text = this.Ba_M_Kaze + "西";
label5.Text = this.Ba_M_Kaze + "北";
break;
default:
break;
}
//親から数えて牌の積もる場所を決める
this.label1.Text = "親は" + OyaName+"です。もう一度サイコロを振りましょう";
break;
case 2:
this.timer1.Enabled = false;
Tumo_Pos = (SaikoroA + SaikoroB) % 4;
this.label1.AutoSize = true;
this.label1.Text = "積もる場所は親から数えて" + Tumo_Pos + "番目です";
this.Ba_Flg = (Oya_Pos + Tumo_Pos) % 4;
if (this.Ba_Flg == 0)
{
Ba_Flg = 4;
}
//ba_flgは下家:1、対面:2、上家:3、起家:4
Saikoro_Num = (SaikoroA + SaikoroB);
MessageBox.Show("番号は"+Saikoro_Num);
CmdOrder = 3;
this.button2.Visible=true;
this.button2.AutoSize=true;
this.button2.Text="配牌を始めてよいですか";
break;
case 3:
default:
break;
}
}
private void button2_Click(object sender, EventArgs e)
{
this.label1.Text = "コマンドを押して配牌します」";
this.button2.Visible = false;
}
public void 裏画像消去(int Pai_pos)
{
/*
'pai_pos→下家から数えての牌の番号
'配列は0から始まっているのでイメージは1を引いたもの
*/
int Tmp_Pai_pos = 0;
int IePai_No=0;
if (Pai_pos>=1 && Pai_pos<=17){
//上家の裏牌番号
Tmp_Pai_pos=1;
this.KamiPict[Pai_pos-1].BackgroundImage.Dispose();
this.KamiPict[Pai_pos-1].BackgroundImage=null;
}
else if(Pai_pos>=18 && Pai_pos<=34){
Tmp_Pai_pos=2;
//対面の裏牌番号
IePai_No = Pai_pos % 17;
if (IePai_No == 0){
IePai_No = 17;
}
ToiPict[IePai_No - 1].BackgroundImage.Dispose();
ToiPict[IePai_No - 1].BackgroundImage=null;
}
else if(Pai_pos>=35 && Pai_pos<=51){
Tmp_Pai_pos=3;
// ' 下家の裏牌番号
IePai_No = Pai_pos % 17;
if (IePai_No == 0){
IePai_No = 17;
}
SimoPict[IePai_No - 1].BackgroundImage.Dispose();
SimoPict[IePai_No - 1].BackgroundImage = null;
}
else if(Pai_pos>=52 && Pai_pos<=68){
// '`起家の裏牌番号
IePai_No = Pai_pos % 17;
if( IePai_No == 0){
IePai_No = 17;
}
JibunPict[IePai_No - 1].BackgroundImage.Dispose();
JibunPict[IePai_No - 1].BackgroundImage = null;
}
}
}
}
*** テキスト ***