(C#)五子棋myGobangBB

*本程序是在myGobangAA基础上进行改进,成为一个基本完整的项目。

*[

为了保留下原myGobangAA代码,以简化本项目myGobangBB的生成,可先新建一个文件夹myGobangBB,然后把

*原myGobangAA项目的文件都copy到myGobangBB,必要时可将原文件中命名空间的名称myGobangAA改为myGobangBB(不改也可)]

*

*

*要点:

* 1)五子棋基本算法大多从JAVA代码中复制过来。除了数组,C#

与JAVA语法基本通用。

* 数组表示的差异,可用菜单"编辑>查找,替换"快速解决。(将"][" 替换为",")

* 2)消除锯齿

* (应先加入:using System.Drawing.Drawing2D;)

* Graphics g_Image =

Graphics.FromImage(myImage);//创建一个在myImage中绘图的Graphics

* g_Image.SmoothingMode = SmoothingMode.AntiAlias;

*

*

3)本例有二个计时器Timer,均从工具箱拖入,一个命名为MyTimer,一个命名为DateTimer.

* 3a)MyTimer(显示一盘对局持续时间);

*  Interval属性设为100(1000为一秒)

* 将找到事件tick,双击即可自动生成MyTimer_Tick()代码块,在其中添加每隔一段时间需要执行代码.

*

(VS2005将自动在Form1.Designer.cs中添加注删该事件侦听器的代码:

* this.MyTimer.Tick += new

System.EventHandler(this.MyTimer_Tick);

* 3b)DateTimer(显示系统的日期与时间);

* textDate.Text= DateTime.Now.ToString();//显示系统时间

* textDate是一个TextBox控件,其multiline属性应设是true,TextAlign属性应设为center

*

* 5)退出程序: Application.Exit();

* 6)

ShowWinLabel控件背景色BackColor设为透明:transparent

*

*

*以下是原myGobangAA的说明

*实现功能:

* 点击五子棋盘时,邻近的线条交点上,出现黑子。

*

(以后将在些基础上添加五子棋算法,自动下出白子,并判断胜负)

* (每下一手棋,都重绘一遍棋盘和棋子)

* 要点:

*

* 1)请特别注意ReDraw(),

其它成员方法(函数)大多由它来调用。

* 2)如何添加事件

* 本例添加的Form1_MouseClick()事件的具体方法:在可视设计界面的属性窗口,找到该事件后双击即可。

* 添加成功后,Form1.Designer.cs文件中会自动生成以下代码(注册监听程序):

* this.MouseClick += new

System.Windows.Forms.MouseEventHandler(this.Form1_MouseClick);

* 3)为Form1添加成员变量和方法成员(函数)

*  在Form1.CS中直接添加。

*

4)为Form1添加较多的成员后,可以在代码界面的左上方的列表框中查看所有成员,把握总体结构。

*   还可很方便地跳转到选定成员的代码块。

* 5)定义二维数组:int[,] P = new int[15,

15];

* 6)双倍缓冲绘图

*    Graphics g_Image =

Graphics.FromImage(myImage);;从图像中获得g_Image,它是在图像中进行绘制的Graphics

*   把绘好的myImage,

一次性展现在指定的区域(myRec:displayGraphics.DrawImage(myImage, myRec);

* 7)几个数学函数。

*

其实不必刻意去记,VS2005设计界面的提供了强大的提示功能,

*

若想使用某一数学计算函数(如三角函数,开平方等),只要输入一个"m",后面就可以通过在列表框中的选择搞定。

*

using System;

using

System.Collections.Generic;

using

System.ComponentModel;

using

System.Data;

using

System.Drawing;

using

System.Text;

using

System.Windows.Forms;

using

System.Drawing.Drawing2D;

namespace

myGobangBB

{

public

partial class Gobang : Form

{

const int myBorder = 10;//棋盘左边与主窗体左边的间隔=棋盘上边与主窗体上边的间隔

const int myPadding = 20;//棋盘边白(棋盘边缘与最相邻的线条的间隔)

const int myCell = 30;//小方格边长

const int myLine = 15;//横,竖均为15条线

const int myR = (int)(myCell / 2.2);//棋子半径

(棋子直径略小于小方格边长)

int[,] P = new int[myLine,

myLine];//棋盘交叉点(落子点),值为1:黑子,2:白子,0:无子

int LastChessX, LastChessY;//最后一手棋的下标

const int scanDirection = 4;//扫描方向数

int[ ,,] WhiteValue = new int[myLine ,myLine,scanDirection+1];//扫描白子棋形后得出的各点重要性的值,

//scanDirection+1:多出的一个用来存入四个方向合计数 :P[X,Y,0]=P[X,Y,1]+P[X,Y,2]

+P[X,Y,3] +P[X,Y,4]

int [ ,,] BlackValue = new int[myLine

,myLine,scanDirection+1];//扫描黑子棋形后得出的各点重要性的值,详见init()中的注释

// AudioClip audio1,audio2;//音响剪辑类(落子, 胜利)

int TheEnd=0; //(0-中止,1-黑胜,2-白胜,大于2的数-正在进行对局)

int PassedMinute =0,PassedSecond = 0;

Rectangle myRec = new Rectangle(myBorder, myBorder, (int)(myLine -

1) * myCell + 2 * myPadding, (int)(myLine - 1) * myCell + 2 *

myPadding);//屏幕上的矩形

Rectangle myImageRec = new Rectangle(0, 0, (int)(myLine - 1) *

myCell + 2 * myPadding, (int)(myLine - 1) * myCell + 2 *

myPadding); //Image中的矩形

public Gobang()

{

InitializeComponent();

initP();

StateText.Text = "对局未开始";

ShowWinlabel.Visible = false;

}

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

g.FillRectangle(Brushes.DarkGreen,

ClientRectangle);//全部客户区涂背景色

ReDraw();

}

protected void ReDraw()

{

//每下一手,都重新绘一遍棋盘和棋子。

Image myImage = new Bitmap(myRec.Width, myRec.Height);

Graphics g_Image =

Graphics.FromImage(myImage);//创建一个在myImage中绘图的Graphics

Graphics displayGraphics =

this.CreateGraphics();//创建一个屏幕中绘图的Graphics

g_Image.SmoothingMode = SmoothingMode.AntiAlias;

DrawChessBoard(g_Image);//在myImage绘棋盘

DrawChess(g_Image);//在myImage绘棋子

//以上均在内存的myImage中绘制,下面将绘制完成myImage一次性显示在屏幕上

displayGraphics.DrawImage(myImage, myRec);

//以下清理内存

myImage.Dispose();

displayGraphics.Dispose();

}

protected void initP()

{

//清空所有棋子

for (int xx = 0; xx < myLine; xx++)

{

for (int yy = 0; yy < myLine; yy++)

{

P[xx, yy] = 0;

}

}

}

protected void DrawChessBoard(Graphics g_Img)

{

g_Img.FillRectangle(Brushes.BurlyWood, myImageRec);//

using (Pen myPen = new Pen(Color.Black, 3))

{

// g.DrawRectangle(myPen, new Rectangle(myLeft, myTop, (int)

(myCol-1) * myCell, (int) (myCol-1) * myCell));

g_Img.DrawRectangle(myPen, myImageRec);

}

using (Pen myPen = new Pen(Color.Black, 1))

{

for (int n = 0; n < myLine; n++) //竖线

{

g_Img.DrawLine(myPen, myPadding + n * myCell, myPadding, myPadding

+ n * myCell, myPadding + myCell * (myLine - 1));

}

for (int m = 0; m < myLine; m++) //横线

{

g_Img.DrawLine(myPen, myPadding, myPadding + m * myCell, myPadding

+ myCell * (myLine - 1), myPadding + m * myCell);

}

}

}

private void DrawChess(Graphics g_Img)

{

for (int xx = 0; xx < myLine; xx++)

{

for (int yy = 0; yy < myLine; yy++)

{

switch (P[xx, yy])

{

case 1:

g_Img.FillEllipse(Brushes.Black, myPadding + xx * myCell - myR,

myPadding + yy * myCell - myR, myR * 2, myR * 2);

break;

case 2:

g_Img.FillEllipse(Brushes.White, myPadding + xx * myCell - myR,

myPadding + yy * myCell - myR, myR * 2, myR * 2);

break;

}

}

}

g_Img.DrawLine(Pens.Red,

myPadding + LastChessX * myCell - 4,

myPadding + LastChessY * myCell,

myPadding + LastChessX * myCell + 4,

myPadding + LastChessY * myCell);

g_Img.DrawLine(Pens.Red,

myPadding + LastChessX * myCell,

myPadding + LastChessY * myCell - 4,

myPadding + LastChessX * myCell,

myPadding + LastChessY * myCell + 4);

}

private void Form1_MouseClick(object sender, MouseEventArgs

e)

{

if (TheEnd < 3)

return; //如对局不处于对局状态,退出本过程(只有当对局还在进行时,才执行以下代码)

int x = e.X, y = e.Y;

//以下计算离击点最近的棋点坐标(xx,yy),并计算两者之间距离(MyDistance)

double xxx = ((x - myBorder - myPadding) /

(double)myCell);

double yyy = ((y - myBorder - myPadding) /

(double)myCell);

//不能写作: double

yyy=(double)((y-myBorder)/myCell);

//因为(y-myBorder)/Myw

是int,int转换为double,精度不会提高

int xx = (int)(Math.Round(xxx));

int yy = (int)(Math.Round(yyy));

double tmpx = xx * (double)myCell + myBorder +

myPadding;

double tmpy = yy * (double)myCell + myBorder +

myPadding;

double MyDistance = Math.Sqrt((x - tmpx) * (x - tmpx) + (y - tmpy)

* (y - tmpy));

if (MyDistance < myR * 0.9)

{ //击点与棋点的距离须在MyR*0.9范围内,才执行以下代码,否则无反应

if (P[xx, yy] == 0) //若该点无子(0:无子; 1:黑子; 2:白子)

{

P[xx, yy] = 1;

LastChessX = xx;//最后一手棋的坐标(以便重画时在该棋子上画红十字)

LastChessY = yy;

// audio1.play();//落子声

ReDraw();

TheEnd =

ScanForEnd(1);//对最后一个黑子的四周进行扫描(看是否有五个连续的黑子)

if (TheEnd==1)

{

ShowWin(1);

}else

{

NextWhiteChessman();

ReDraw();

TheEnd = ScanForEnd(2);

if (TheEnd == 2)

{

ShowWin(2);

}

}

//

}

}

ReDraw();

}

//白方(机器方)下子时调用

private void NextWhiteChessman(){

InitValue();//每次扫描前,应调用此函数,将WhiteValue,BlackValue清零

int MaxValue1=0;//黑方棋形最大值

int MaxValue2=0;//白方棋形最大值

//int,MaxValueY[];//若干个同为最大值的点的X,Y坐标(很多情况下,最大值不只一个)

int[] MaxValueX =new

int[8]; //如有8个以上最大值点,只取其中8个

int[] MaxValueY=new

int[8];

//以下遍历各点,若为空(可落子点),则调用ScanChessman(),对该点进行各方向扫描

//先扫描白方棋形,再扫描黑方棋形,找出各自最大值

for (int x=0;x

for (int y=0;y

if (P[x,y]==0){

ScanChessman(x,y,2);//扫描白方棋形

if (WhiteValue[x,y,0]>MaxValue2){

MaxValue2=(int)(WhiteValue[x,y,0]);

}

}

}

}

for (int x=0;x

for (int y=0;y

if (P[x,y]==0){

ScanChessman(x,y,1);//扫描黑方棋形

if (BlackValue[x,y,0]>MaxValue1){

MaxValue1=(int)(BlackValue[x,y,0]);

}

}

}

}

//找出同为最大值的若干个点(最多不超过8个)

int n=0;

if (MaxValue2>=MaxValue1){

//若白方棋形点的值大等于黑方,取白方

for (int x=0;x

&&

n<8 ;x++){

for (int y=0;y

&&

n<8;y++){

if(WhiteValue[x,y,0]==MaxValue2){

MaxValueX[n]=x;

MaxValueY[n]=y;

n=n+1;

}

}

}

}else

{ //否则取黑方

for (int x=0;x

&& n<8;

x++){

for (int y=0;y

&&

n<8;y++){

if(BlackValue[x,y,0]==MaxValue1){

MaxValueX[n]=x;

MaxValueY[n]=y;

n=n+1;

}

}

}

}

//在若干个同为最大值的点中随机取一个

Random myR = new Random();

int r=(int)(myR.Next(n)) ;//n是当前最大值的点的个数

//在选中的点上落白子

P[MaxValueX[r],MaxValueY[r]]=2;

LastChessX=MaxValueX[r];//最后一手棋的坐标(以便重画时在该棋子上画红十字)

LastChessY=MaxValueY[r];

}//end NextWhiteChessman

private void ScanChessman(int x, int y,int myChessman){

//下面的 向左与向右为一组(横线)

//向左搜索

int myValue=1;

int scan=1;

float ReturnFlag=1.0f;//向一侧扫描时返回的类型

for(int xx=x-1;xx>=0

&& scan ==1 ; xx--){

if ( P[xx,y]==myChessman){

myValue=myValue*10;

}

else {

if (P[xx,y]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

//向右搜索

scan=1;

for(int xx=x+1;xx< myLine

&& scan ==1 ; xx++){

if ( P[xx,y]==myChessman){

myValue=myValue*10;

}

else {

if (P[xx,y]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

if(myValue>=10*10*10*10)//已有四连子时,返回类型恒为1

ReturnFlag=1;

if(myChessman==2){

WhiteValue[x,y,1]=(int)(myValue*ReturnFlag);

}else{

BlackValue[x,y,1]=(int)(myValue*ReturnFlag);

}

///下面的向上与向下为一组(竖线)

//向上搜索

myValue=1;

scan=1;

ReturnFlag=1.0f;

for(int yy=y-1;yy>=0

&& scan ==1 ; yy--){

if ( P[x,yy]==myChessman){

myValue=myValue*10;

}

else {

if (P[x,yy]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

//向下搜索

scan=1;

for(int yy=y+1;yy< myLine

&& scan ==1 ; yy++){

if ( P[x,yy]==myChessman){

myValue=myValue*10;

}

else {

if (P[x,yy]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

if(myValue>10*10*10*10)//已有四连子时,返回类型恒为1

ReturnFlag=1;

if(myChessman==2){

WhiteValue[x,y,2]=(int)(myValue*ReturnFlag);

}else{

BlackValue[x,y,2]=(int)(myValue*ReturnFlag);

}

//下面的向左上与向右下为一组(斜线)

//向左上搜索

myValue=1;

scan=1;

ReturnFlag=1.0f;

int yyy = y;

for(int xx=x-1;xx>=0

&& scan ==1 ; xx--){

yyy = yyy -1;

if (yyy>=0){

if ( P[xx,yyy]==myChessman){

myValue=myValue*10;

}

else {

if (P[xx,yyy]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

else {

scan=0;

}

}

//向右下

scan=1;

yyy=y;

for(int xx=x+1;xx< myLine

&& scan ==1 ; xx++){

yyy=yyy+1;

if (yyy

if ( P[xx,yyy]==myChessman){

myValue=myValue*10;

}

else {

if (P[xx,yyy]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

else {

scan=0;

}

}

if (myValue>=10*10*10*10)

ReturnFlag=1;

if(myChessman==2){

WhiteValue[x,y,3]=(int)(myValue*ReturnFlag);

}else{

BlackValue[x,y,3]=(int)(myValue*ReturnFlag);

}

///下面的向右上与向左下为一组(反斜线)

//向右上搜索

myValue=1;

scan=1;

ReturnFlag=1.0f;

yyy=y;

for(int xx=x+1;xx

&& scan ==1 ; xx++){

yyy=yyy-1;

if (yyy>=0){

if ( P[xx,yyy]==myChessman){

myValue=myValue*10;

}

else {

if (P[xx,yyy]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

else{

scan=0;

}

}

//向左下搜索

scan=1;

yyy=y;

for(int xx=x-1;xx>=0

&& scan ==1 ; xx--){

yyy=yyy+1;

if (yyy

if ( P[xx,yyy]==myChessman){

myValue=myValue*10;

}

else {

if (P[xx,yyy]!=0){

ReturnFlag

=ReturnFlag-0.5f;

}

scan=0;

}

}

else {

scan=0;

}

}

if (myValue>=10*10*10*10)

ReturnFlag=1;

if(myChessman==2){

WhiteValue[x,y,4]=(int)(myValue*ReturnFlag);

}else{

BlackValue[x,y,4]=(int)(myValue*ReturnFlag);

}

/

if(myChessman==2){

WhiteValue[x,y,0]=

WhiteValue[x,y,1]+ WhiteValue[x,y,2]+

WhiteValue[x,y,3]+WhiteValue[x,y,4];

//以下代码,参见前头的说明(十三)

if (WhiteValue[x,y,0]>10000)

WhiteValue[x,y,0]=10000;

if (WhiteValue[x,y,0]>=1000

&&

WhiteValue[x,y,0]<10000)

WhiteValue[x,y,0]=1000;

if (WhiteValue[x,y,0]>=200

&&

WhiteValue[x,y,0]<=300)

WhiteValue[x,y,0]=800;

}else{

BlackValue[x,y,0]=

BlackValue[x,y,1]+ BlackValue[x,y,2]+

BlackValue[x,y,3]+BlackValue[x,y,4];

//以下代码,参见前头的说明(十三)

if

(BlackValue[x,y,0]>10000)

BlackValue[x,y,0]=10000;

if

(BlackValue[x,y,0]>=1000

&&

BlackValue[x,y,0]<10000)

BlackValue[x,y,0]=1000;

if

(BlackValue[x,y,0]>=200

&&

BlackValue[x,y,0]<=300)

BlackValue[x,y,0]=800;

}

}//end ScanChessman

private void InitValue(){

for (int x=0;x

for (int y=0;y

for(int n=0;n

WhiteValue[x,y,n]=0;

BlackValue[x,y,n]=0;

}

}

}

}

private int ScanForEnd(int myChessman)

{

//以下先扫描横线,若返回值小于5,则再依次扫描竖线,斜线,反斜线

int MyEnd = 9; //int TheEnd =

0; //(0-中止,1-黑胜,2-白胜,大于2的数-正在进行对局)

int tt = ScanForEnd_LeftToRight(myChessman);

if (tt >= 5)

{

MyEnd = myChessman;

}

else

{

tt = ScanForEnd_TopToBotton(myChessman);

if (tt >= 5)

{

MyEnd = myChessman;

}

else

{

tt = ScanForEnd_LeftTopToRightBotton(myChessman);

if (tt >= 5)

{

MyEnd = myChessman;

}

else

{

tt = ScanForEnd_RightTopToLeftBotton(myChessman);

if (tt >= 5)

{

MyEnd = myChessman;

}

}

}

}

return MyEnd;

}

private int ScanForEnd_LeftToRight(int myChessman)

{

int t = 1;

int scan = 1;

//向左搜索

for (int xx = LastChessX - 1; xx >= 0

&& scan == 1; xx--)

{

if (P[xx,LastChessY] == myChessman)

{

t = t + 1;

}

else

{

scan = 0;

}

}

//向右搜索

scan = 1;

for (int xx = LastChessX + 1; xx < myLine

&& scan == 1; xx++)

{

if (P[xx,LastChessY] == myChessman)

{

t = t + 1;

}

else

{

scan = 0;

}

}

return t;

}//end

ScanForEnd_LeftToRight

private int ScanForEnd_TopToBotton(int myChessman)

{

int t = 1;

int scan = 1;

//向上搜索

for (int yy = LastChessY - 1; yy >= 0

&& scan == 1; yy--)

{

if (P[LastChessX,yy] == myChessman)

{

t = t + 1;

}

else

{

scan = 0;

}

}

//向下搜索

scan = 1;

for (int yy = LastChessY + 1; yy < myLine

&& scan == 1; yy++)

{

if (P[LastChessX,yy] == myChessman)

{

t = t + 1;

}

else

{

scan = 0;

}

}

return t;

}

private int ScanForEnd_LeftTopToRightBotton(int

myChessman)

{

int t = 1;

int scan = 1;

//向左上搜索

int yy = LastChessY - 1;

for (int xx = LastChessX - 1; xx >= 0

&& yy >= 0

&& scan == 1; xx--)

{

if (P[xx,yy] == myChessman)

{

t = t + 1;

yy--;

}

else

{

scan = 0;

}

}

//向右下

scan = 1;

yy = LastChessY + 1;

for (int xx = LastChessX + 1; xx < myLine

&& yy < myLine

&& scan == 1; xx++)

{

if (P[xx,yy] == myChessman)

{

t = t + 1;

yy++;

}

else

{

scan = 0;

}

}

return t;

}

private int ScanForEnd_RightTopToLeftBotton(int

myChessman)

{

int t = 1;

int scan = 1;

//向右上搜索

int yy = LastChessY - 1;

for (int xx = LastChessX + 1; xx < myLine

&& yy >= 0

&& scan == 1; xx++)

{

if (P[xx,yy] == myChessman)

{

t = t + 1;

yy--;

}

else

{

scan = 0;

}

}

//向左下搜索

scan = 1;

yy = LastChessY + 1;

for (int xx = LastChessX - 1; xx >= 0

&& yy < myLine

&& scan == 1; xx--)

{

if (P[xx,yy] == myChessman)

{

t = t + 1;

yy++;

}

else

{

scan = 0;

}

}

return t;

}

private void ShowWin(int Win)

{

MyTimer.Stop();//中止计时

// audio2.play(); //胜利声响

StateText.Text = "对局终止";

StartButton.Text = "重新开始";

ShowWinlabel.Visible = true;

if (Win == 1)

ShowWinlabel.Text = "黑胜!";

else

ShowWinlabel.Text = "白胜!";

}

private void StartButton_Click(object sender, EventArgs

e)

{

if (TheEnd < 3)

{

StateText.Text = "对局正在进行";

MyTimer.Enabled = true;

StartButton.Text = "停止";

ShowWinlabel.Visible = false;

TheEnd = 3;

PassedMinute = 0;

PassedSecond = 0;

initP();

}

else

{

StateText.Text = "对局被中止";

MyTimer.Enabled = false;

StartButton.Text = "重新开始";

TheEnd = 0;

}

}

private void MyTimer_Tick(object sender, EventArgs e)

{

PassedSecond = PassedSecond + 1;

if (PassedSecond == 60)

{

PassedMinute = PassedMinute + 1;

PassedSecond = 0;

}

string nowSecond;

if (PassedSecond<10)

nowSecond = "0"+ PassedSecond.ToString();

else

nowSecond = PassedSecond.ToString();

// string nowSecond= (PassedSecond>10 ?

PassedSecond.ToString():

"0"+PassedSecond.ToString());//可能执行速度慢,显示效果不好

textTime.Text = PassedMinute.ToString()+":"+nowSecond;

// DateTime.Now.ToString();显示系统时间

}

private void ExitButton_Click(object sender, EventArgs

e)

{

Application.Exit();

}

}

}

c#五子棋实验报告_(C#)五子棋相关推荐

  1. c#五子棋实验报告_C#实现五子棋游戏

    曾经自学C#做计算机图形学的作业,GDI+画图确实好用,目前在找.NET的实习,尝试做了一个最基本的五子棋,复习一下C#的基本语法,目前只能当跟基友一起玩的单机小游戏,之后再加入AI和联网对战功能.目 ...

  2. c#五子棋实验报告_基于c#的五子棋游戏的设计与实现毕业论文.doc

    基于c#的五子棋游戏的设计与实现毕业论文 郑 州 科 技 学 院 课 程 设 计 论 文 基于C#的五子棋游戏的设计与实现 学生姓名:王新年 学 号:201015066 年级专业:10级计科二班 指导 ...

  3. python五子棋实验报告_python实现五子棋游戏

    本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: 全部工程文件,在GitHub:五子棋 效果预览: #!/usr/bin/env python ...

  4. c语言五子棋实验报告免费下载,五子棋C语言程序

    # include # include # include # define SPA 0 # define MAN 1 # define COM 2 /* 空位置设为0 ,玩家下的位置设为1 ,电脑下 ...

  5. c语言五子棋实验报告免费下载,五子棋c语言版

    五子棋c语言版 #include #include #include #include #define N 19 int i,j,k,size=N; int isBlack=1;//当前是黑方下子 i ...

  6. JavaFx/Java 大作业 五子棋 实验报告

    Java大作业五子棋实验报告 实验目的 通过此次实验,对这一学期学习的内容尤其是界面开发部分做了一个很好的回顾,看似简单的五子棋程序,设计好也确实费了我一点功夫 功能模块简介和系统结构图 ChessG ...

  7. c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...

    C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...

  8. java文件加密解密实验报告_《网络信息安全技术》_实验报告_破译vigenamp#232;re_密码加密的密文...

    <<网络信息安全技术>_实验报告_破译vigen&amp#232;re_密码加密的密文>由会员分享,可在线阅读,更多相关<<网络信息安全技术>_实验报 ...

  9. 计算机组成原理寄存器的实验原理,计算机组成原理实验报告_寄存器的原理及操作课案.docx...

    <计算机组成原理实验报告_寄存器的原理及操作课案.docx>由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关<计算机组成原理实验报告_寄存器的原理及操作课案.d ...

最新文章

  1. 知乎如何运用OKR管理公司目标,达成绩效?
  2. bool函数_有趣的函数绝无仅有
  3. CUDA编程-gt;CUDA入门了解(一)
  4. 实战Solaris 10
  5. 什么镜头最适合拍风景_35mm F1.8定焦镜头,拍人拍风景都可以!
  6. 理解Java集合框架里面的的transient关键字
  7. bzoj1876 [SDOI2009]SuperGCD 辗转相减+高精
  8. 孙宏斌,真的押上了全部身家?
  9. A water problem (hdu-5832)
  10. ES6——Class 笔记
  11. WebStorm 是什么软件
  12. C# Thread.Sleep 导致内存溢出,在多线程里Sleep的真实情况 软件闪退 内存溢出
  13. 华为c199刷android原生,华为C199刷机教程(强刷官方固件rom包)
  14. 计算机图形学 读书笔记(七)B样条曲线 B-Spline
  15. 苹果手机怎么备份所有数据_数据蛙:微信怎么备份手机通讯录,随时备份和恢复手机联系人!...
  16. 消息中间件 - ActiveMQ高级特性和用法-Mirrored Queue 镜像队列(了解即可)(十)
  17. 查询加日期oracle,Oracle查询优化日期运算实例详解
  18. buct寒假集训——lca
  19. 计算机为什么能做翻译,为什么计算机能翻译?
  20. 食品赛道崛起,舌尖美食走俏礼品市场

热门文章

  1. vue jest (三)
  2. ORA-01841: (full) year must be between -4713 and +9999, and not be 0 及自定义my_to_date函数
  3. 由你定义吃鸡风格!CycleGAN,你的自定义风格转换大师[楚才国科]
  4. linux桌面上创建文件夹,如何在桌面上创建一个文件夹_在桌面上建立文件夹的方法...
  5. c语言开发一个绘画,c语言也能画画
  6. android立体图形——三棱锥
  7. “互联网+”大创计划书万能模板2.0(直接复制粘贴)
  8. Python代码混淆和加密技术
  9. 服务器一直显示关机怎么办,云服务器一直处于关机状态
  10. 2022 RoboCom 世界机器人开发者大赛-本科组(国赛)