說(shuō)到五子棋,想必大家都會(huì)很熟悉项棠,誰(shuí)先連成五顆誰(shuí)就勝利柄延。
今天我想說(shuō)一下游戲編程思想概述蚀浆,游戲并不是你所看見(jiàn)的GDI繪圖中看到的那些,那只能算游戲中的一些元素搜吧,一個(gè)游戲除了表面視圖市俊,還有它實(shí)質(zhì)的東西--內(nèi)核(游戲算法)。
那么游戲的核心是怎么和圖形鏈接起來(lái)的呢滤奈?用戶的操作信息在核心中進(jìn)行摆昧,再把響應(yīng)后的游戲數(shù)據(jù)反饋給游戲界面,這就是一個(gè)完整的游戲蜒程。在游戲中游戲的內(nèi)核是一直在變化的绅你,知識(shí)有的時(shí)候并沒(méi)有反饋在界面而已。
本游戲的制作分為兩大部分昭躺,游戲界面和游戲核心忌锯。游戲的設(shè)計(jì)可以先設(shè)計(jì)界面再設(shè)計(jì)核心,或者先設(shè)計(jì)核心 在設(shè)計(jì)界面领炫,這兩種方法各有千秋偶垮。先設(shè)計(jì)界面感覺(jué)更加直觀,更加容易理解帝洪。先設(shè)計(jì)核心不容易亂和丟失功能似舵。
本文是先設(shè)計(jì)界面再設(shè)計(jì)核心。
對(duì)于框架的建立也就是界面碟狞,最好要了解五子棋的規(guī)格大小啄枕,國(guó)際棋牌是15X15。
由于寫的充忙族沃,所以界面略顯粗糙频祝,后面可以根據(jù)自己的需要更改泌参。
首先是建立一個(gè)winform窗體(本棋盤沒(méi)使用其他控件)
在 private void Form1_Paint(object sender, PaintEventArgs e)事件中利用GDI繪圖畫(huà)出一個(gè)棋盤(也可根據(jù)自己需要找個(gè)棋盤圖填充進(jìn)去,本文不詳講)
再看棋盤代碼前常空,不知道各位了解顯示器上的坐標(biāo)系不沽一,windows上的坐標(biāo)系基于設(shè)備坐標(biāo),屏幕上的點(diǎn)通過(guò)X,Y坐標(biāo)描述漓糙。X坐標(biāo)從你當(dāng)前窗口的左上角從左到右遞增铣缠,Y坐標(biāo)從上往下遞增。這樣能使你更好的理解上訴代碼昆禽,棋盤的構(gòu)造蝗蛙。
棋盤構(gòu)造成功出來(lái)了,我們又該構(gòu)造什么了醉鳖?可能屏幕前的你脫口而出--棋子捡硅。
對(duì),就是棋子盗棵。構(gòu)造棋子的話是不是應(yīng)該是先畫(huà)出一個(gè)圓壮韭,然后在將圓形填充。
首先構(gòu)造一直筆Pen pens = new Pen(Color.Black, 2);表示黑子纹因;然后在構(gòu)造一個(gè)填充刷 Brush b = new LinearGradientBrush(new Point(0, 10), new Point(10, 10), Color.Black, Color.Black);填充刷的顏色與筆顏色一樣喷屋。然后構(gòu)造該棋子所在的位置和大小Rectangle r = new Rectangle(newX, newY, 10, 10);最后構(gòu)造一個(gè)GDI繪圖對(duì)象 Graphics gra = this.CreateGraphics(); 先畫(huà)出一個(gè)圓gra.DrawEllipse(pens, r);在填充該圓gra.FillEllipse(b, r);
此時(shí)界面已經(jīng)構(gòu)造完成。
下面就是游戲的內(nèi)核瞭恰,
首先定義兩個(gè)存儲(chǔ)棋子的數(shù)組
這些你應(yīng)該考慮為什么會(huì)定義一個(gè)int型二維數(shù)組屯曹,我所點(diǎn)擊的坐標(biāo)不是隨機(jī)嘛,不是double型么寄疏,為什么是牢?首先當(dāng)你下棋時(shí),屏幕獲取到你的點(diǎn)擊位置Location陕截,此時(shí)你應(yīng)該考慮的是怎么樣讓棋子落子格子的正中間而不是指哪里就那里驳棱,怎么智能識(shí)別棋子想要落的位置,在我這里就是這樣寫的
這樣就獲取到了棋子想要落取的位置农曲,然后判斷該落子情況社搅,在這落子的地方是不是已經(jīng)落子了,沒(méi)落子該怎么儲(chǔ)存乳规,我寫了一個(gè)判斷落子情況函數(shù)MyChess
首先獲取到落子的坐標(biāo)然后通過(guò)除以棋盤間隔獲取到落子的位置形葬,首先該數(shù)組全部為0,如果落子成功就變成1表示該位置有落子暮的,然后通過(guò)該數(shù)組來(lái)判斷輸贏情況笙以。
現(xiàn)在落子情況已經(jīng)有了,就該判斷下棋過(guò)程輸贏情況了冻辩,五子棋連成線無(wú)非四種情況猖腕,橫拆祈,豎,斜倘感,反斜四種情況放坏。只要滿足其中一種情況就獲勝。
判斷橫線輸贏
豎線輸贏
斜線情況是利用利用數(shù)學(xué)公式 y=kx+b來(lái)判斷的
反斜線情況
此時(shí)游戲核心已經(jīng)完成老玛。
下面就是一些效果圖
源碼:
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.Drawing.Drawing2D;
namespace wuziqi
{
? ? public partial class Form1 : Form
? ? {
? ? ? ? public Form1()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 用來(lái)標(biāo)識(shí)鼠標(biāo)點(diǎn)擊事件是否可用
? ? ? ? /// </summary>
? ? ? ? bool bTemp = false;
? ? ? ? /// <summary>
? ? ? ? /// 棋盤長(zhǎng)度
? ? ? ? /// </summary>
? ? ? ? int nLength = 290;
? ? ? ? /// <summary>
? ? ? ? /// 棋盤間隔
? ? ? ? /// </summary>
? ? ? ? int nJg = 20;
? ? ? ? /// <summary>
? ? ? ? /// 當(dāng)前是黑方還是白方下棋
? ? ? ? /// </summary>
? ? ? ? bool bUser = true;
? ? ? ? /// <summary>
? ? ? ? /// 黑方二維數(shù)組
? ? ? ? /// </summary>
? ? ? ? int[,] myBlack = new int[15, 15];
? ? ? ? /// <summary>
? ? ? ? /// 白方二維數(shù)組
? ? ? ? /// </summary>
? ? ? ? int[,] myWhite = new int[15, 15];
? ? ? ? /// <summary>
? ? ? ? /// 棋盤規(guī)格
? ? ? ? /// </summary>
? ? ? ? int nSize = 15;
? ? ? ? /// <summary>
? ? ? ? /// 游戲加載界面
? ? ? ? /// </summary>
? ? ? ? /// <param name="sender"></param>
? ? ? ? /// <param name="e"></param>
? ? ? ? private void Form1_Load(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? labelControl1.Text = "游戲未開(kāi)始";
? ? ? ? ? ? simpleButton3.Enabled = false;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 棋盤
? ? ? ? /// </summary>
? ? ? ? /// <param name="sender"></param>
? ? ? ? /// <param name="e"></param>
? ? ? ? private void Form1_Paint(object sender, PaintEventArgs e)
? ? ? ? {
? ? ? ? ? e.Graphics.Clear(Color.AliceBlue);//背景色淤年;? ? ? ?
? ? ? ? ? Pen pen = new Pen(Color.Red, 2);//筆的顏色與粗細(xì)
? ? ? ? ? for (int i = 30; i <= 310; i = i + 20)//步長(zhǎng)20
? ? ? ? ? {
? ? ? ? ? ? ? Point point = new Point(i, 30);
? ? ? ? ? ? ? Point point1 = new Point(i, 310);
? ? ? ? ? ? ? e.Graphics.DrawLine(pen, point, point1);//畫(huà)豎線
? ? ? ? ? ? ? Point point2 = new Point(30, i);
? ? ? ? ? ? ? Point point3 = new Point(310, i);
? ? ? ? ? ? ? e.Graphics.DrawLine(pen, point2, point3);//畫(huà)橫線
? ? ? ? ? }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 游戲開(kāi)始按鈕
? ? ? ? /// </summary>
? ? ? ? /// <param name="sender"></param>
? ? ? ? /// <param name="e"></param>
? ? ? ? private void simpleButton2_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? labelControl1.Text = "游戲開(kāi)始,黑方下棋";
? ? ? ? ? ? bTemp = true;
? ? ? ? ? ? simpleButton2.Enabled = false;
? ? ? ? ? ? simpleButton3.Enabled = true;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 鼠標(biāo)點(diǎn)擊事件
? ? ? ? /// </summary>
? ? ? ? /// <param name="sender"></param>
? ? ? ? /// <param name="e"></param>
? ? ? ? private void Form1_MouseClick(object sender, MouseEventArgs e)
? ? ? ? {
? ? ? ? ? ? int n = nLength / nJg + 1;
? ? ? ? ? ? if(bTemp)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (bUser)//因?yàn)楹竺媸锹渥忧闆r所以只能把該誰(shuí)下寫在這里
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? labelControl1.Text = "游戲開(kāi)始,白方下棋";
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? labelControl1.Text = "游戲開(kāi)始,黑方下棋";
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (e.Button == MouseButtons.Left)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? Point p = e.Location;
? ? ? ? ? ? ? ? ? ? int X = p.X;
? ? ? ? ? ? ? ? ? ? int Y = p.Y;
? ? ? ? ? ? ? ? ? ? int newX = (int)((X + nJg / 2) / nJg) * nJg - 10 / 2 - 10;
? ? ? ? ? ? ? ? ? ? int newY = (int)((Y + nJg / 2) / nJg) * nJg - 10 / 2 - 10;
? ? ? ? ? ? ? ? ? ? bool bMyChess = MyChess(newX, newY);
? ? ? ? ? ? ? ? ? ? if (!bMyChess)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if(bUser)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? Pen pens = new Pen(Color.Black, 2);
? ? ? ? ? ? ? ? ? ? ? ? Brush b = new LinearGradientBrush(new Point(0, 10), new Point(10, 10), Color.Black, Color.Black);
? ? ? ? ? ? ? ? ? ? ? ? Rectangle r = new Rectangle(newX, newY, 10, 10);//標(biāo)識(shí)圓的大小(x坐標(biāo),y坐標(biāo)蜡豹,大小)
? ? ? ? ? ? ? ? ? ? ? ? Graphics gra = this.CreateGraphics();
? ? ? ? ? ? ? ? ? ? ? ? gra.DrawEllipse(pens, r);
? ? ? ? ? ? ? ? ? ? ? ? gra.FillEllipse(b, r);
? ? ? ? ? ? ? ? ? ? ? ? gra.Dispose();
? ? ? ? ? ? ? ? ? ? ? ? bool bPing = MyPin();//判斷是否平局
? ? ? ? ? ? ? ? ? ? ? ? if(bPing)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? labelControl1.Text = "平局麸粮,請(qǐng)點(diǎn)擊重開(kāi)";
? ? ? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("平局");
? ? ? ? ? ? ? ? ? ? ? ? ? ? bTemp = false;
? ? ? ? ? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? bool bWin = MyWin();//判斷輸贏;
? ? ? ? ? ? ? ? ? ? ? ? if (bWin)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? labelControl1.Text = "黑方贏镜廉,請(qǐng)點(diǎn)擊重開(kāi)";? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("黑方贏");
? ? ? ? ? ? ? ? ? ? ? ? ? ? bTemp = false;
? ? ? ? ? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? bUser = false;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? Pen pens = new Pen(Color.White, 2);
? ? ? ? ? ? ? ? ? ? ? ? Brush b = new LinearGradientBrush(new Point(0, 10), new Point(10, 10), Color.White, Color.White);
? ? ? ? ? ? ? ? ? ? ? ? Rectangle r = new Rectangle(newX, newY, 10, 10);//標(biāo)識(shí)圓的大小(x坐標(biāo)豹休,y坐標(biāo),大小)
? ? ? ? ? ? ? ? ? ? ? ? Graphics gra = this.CreateGraphics();
? ? ? ? ? ? ? ? ? ? ? ? gra.DrawEllipse(pens, r);
? ? ? ? ? ? ? ? ? ? ? ? gra.FillEllipse(b, r);
? ? ? ? ? ? ? ? ? ? ? ? gra.Dispose();
? ? ? ? ? ? ? ? ? ? ? ? bool bPing = MyPin();//判斷是否平局
? ? ? ? ? ? ? ? ? ? ? ? bool bWin = MyWin();//判斷輸贏桨吊;
? ? ? ? ? ? ? ? ? ? ? ? if (bPing)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? labelControl1.Text = "平局,請(qǐng)點(diǎn)擊重開(kāi)";
? ? ? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("平局");
? ? ? ? ? ? ? ? ? ? ? ? ? ? bTemp = false;
? ? ? ? ? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? if (bWin)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? labelControl1.Text = "白方贏凤巨,請(qǐng)點(diǎn)擊重開(kāi)";
? ? ? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("白方贏");
? ? ? ? ? ? ? ? ? ? ? ? ? ? bTemp = false;
? ? ? ? ? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? bUser = true;
? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? }? ? ? ?
? ? ? ? ? ? }? ? ? ? ? ?
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 平局情況视乐,一般不會(huì)出現(xiàn),還是寫下表示尊敬
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public bool MyPin()
? ? ? ? {
? ? ? ? ? ? int nTemp=0;
? ? ? ? ? ? for (int i = 0; i < nSize; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int j = 0; j < nSize; j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (myBlack[i, j] == 1 || myWhite[i, j] == 1)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? nTemp++;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if(nTemp==225)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 判斷落子情況
? ? ? ? /// </summary>
? ? ? ? /// <param name="x"></param>
? ? ? ? /// <param name="y"></param>
? ? ? ? /// <returns></returns>
? ? ? ? public bool MyChess(int x,int y)
? ? ? ? {
? ? ? ? ? ? int m;
? ? ? ? ? ? int n;
? ? ? ? ? ? m=x/nJg-1;
? ? ? ? ? ? n = y / nJg-1;
? ? ? ? ? ? if (m >= nSize || n >= nSize || m < 0 || n < 0)//超出數(shù)組索引
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? if (myBlack[m, n] == 0 && myWhite[m, n] == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(bUser)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? myBlack[m, n] = 1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? myWhite[m, n] = 1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 輸贏情況
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? public bool MyWin()
? ? ? ? {
? ? ? ? ? ? bool bMyHorizontal = MyHorizontal();//橫線
? ? ? ? ? ? bool bMyVerTical = MyVerTical();//豎線
? ? ? ? ? ? bool bMyOblique = MyOblique();//斜線
? ? ? ? ? ? bool bMyBackslash = MyBackslash();//反斜線
? ? ? ? ? ? if(bMyHorizontal||bMyVerTical||bMyOblique||bMyBackslash)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return true;? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? }
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 橫排情況
? ? ? ? /// </summary>
? ? ? ? public bool MyHorizontal()
? ? ? ? {
? ? ? ? ? ? for(int i=0;i<nSize-4;i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int j = 0; j < nSize;j++ )
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (bUser)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if(myBlack[i,j]==1&&myBlack[i+1,j]==1&&myBlack[i+2,j]==1&&myBlack[i+3,j]==1&&myBlack[i+4,j]==1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (myWhite[i, j] == 1 && myWhite[i + 1, j] == 1 && myWhite[i + 2, j] == 1 && myWhite[i + 3, j] == 1 && myWhite[i + 4, j] == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 豎排情況
? ? ? ? /// </summary>
? ? ? ? public bool MyVerTical()
? ? ? ? {
? ? ? ? ? ? for (int i = 0; i < nSize ; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int j = 0; j < nSize-4; j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (bUser)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (myBlack[i, j] == 1 && myBlack[i , j+1] == 1 && myBlack[i , j+2] == 1 && myBlack[i, j+3] == 1 && myBlack[i, j+4] == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (myWhite[i, j] == 1 && myWhite[i, j + 1] == 1 && myWhite[i, j + 2] == 1 && myWhite[i, j + 3] == 1 && myWhite[i, j + 4] == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 斜線情況 利用數(shù)學(xué)公式 y=kx+b
? ? ? ? /// </summary>
? ? ? ? public bool MyOblique()
? ? ? ? {
? ? ? ? ? ? for (int i = 0; i < nSize - 4; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int j = 0; j < nSize-4; j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (bUser)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (myBlack[i, j] == 1 && myBlack[i + 1, j+1] == 1 && myBlack[i + 2, j+2] == 1 && myBlack[i + 3, j+3] == 1 && myBlack[i + 4, j+4] == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (myWhite[i, j] == 1 && myWhite[i + 1, j+1] == 1 && myWhite[i + 2, j+2] == 1 && myWhite[i + 3, j+3] == 1 && myWhite[i + 4, j+4] == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 反斜線情況
? ? ? ? /// </summary>
? ? ? public bool MyBackslash()
? ? ? ? {
? ? ? ? ? ? for (int i = nSize-1; i >= 4; i--)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int j = 0; j < nSize-4; j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (bUser)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //j-(i-1)
? ? ? ? ? ? ? ? ? ? ? ? if (myBlack[i, j ] == 1 && myBlack[i - 1, j + 1] == 1 && myBlack[i -2, j + 2] == 1 && myBlack[i- 3, j? + 3] == 1 && myBlack[i - 4, j + 4] == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if (myWhite[i, j] == 1 && myWhite[i - 1, j + 1] == 1 && myWhite[i - 2, j + 2] == 1 && myWhite[i - 3, j + 3] == 1 && myWhite[ i - 4, j + 4] == 1)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 重開(kāi)游戲
? ? ? ? /// </summary>
? ? ? ? /// <param name="sender"></param>
? ? ? ? /// <param name="e"></param>
? ? ? private void simpleButton3_Click(object sender, EventArgs e)
? ? ? {
? ? ? ? ? this.Refresh();
? ? ? ? ? Graphics gra = this.CreateGraphics();
? ? ? ? ? gra.Clear(Color.AliceBlue);
? ? ? ? ? Pen pen = new Pen(Color.Red, 2);
? ? ? ? ? for (int i = 30; i <= 310; i = i + 20)//步長(zhǎng)20
? ? ? ? ? {
? ? ? ? ? ? ? Point point = new Point(i, 30);
? ? ? ? ? ? ? Point point1 = new Point(i, 310);
? ? ? ? ? ? ? gra.DrawLine(pen, point, point1);//畫(huà)豎線
? ? ? ? ? ? ? Point point2 = new Point(30, i);
? ? ? ? ? ? ? Point point3 = new Point(310, i);
? ? ? ? ? ? ? gra.DrawLine(pen, point2, point3);//畫(huà)橫線
? ? ? ? ? }
? ? ? }
? ? }
}