中国象棋(web版 源代码)
程序:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
int tru = 20;
int fals = 40;
public ImageButton[,] _Image=new ImageButton[11,10];
//将上一次点击点的坐标保存到数据库中的lastx和lasty
public void SaveToLast()
{
if (Session["user"].ToString() == "red" && _GetUserState(Session["user"].ToString()) == 20)
{
int x, y, lastx, lasty;
x = Getpointx();
y = Getpointy();
lastx = x;
lasty = y;
Updatalastx(lastx);
Updatalasty(lasty);
}
if (Session["user"].ToString() == "black" && _GetUserState(Session["user"].ToString()) == 20)
{
int x, y, lastx, lasty;
x = Getpointx();
y = Getpointy();
lastx = x;
lasty = y;
Updatalastx(lastx);
Updatalasty(lasty);
}
}
//将棋盘上所有棋子图片显示到棋盘上
private void _Drawqizi()
{
//_Init();
int i,j,k;
if (_GetUserState("red") != 0 && _GetUserState("black") != 0)
{
if (Session["user"].ToString() == "red")
{
for (i = 1; i <= 10; i++)
for (j = 1; j <= 9; j++)
{
k = _GetDataQipan(i, j);
_Image[i, j].ImageUrl = _GetImageAdd(k);
}
}
if (Session["user"].ToString() == "black")
{
for (i = 1; i <= 10; i++)
for (j = 1; j <= 9; j++)
{
k = _GetDataQipan(i, j);
_Image[11 - i, 10 - j].ImageUrl = _GetImageAdd(k);
}
}
}
//初始化:对_Image[,]赋值,对ImageButton进行编号
private void _Init()
{
_Image[1, 1] = ImageButton1; _Image[1, 2] = ImageButton2; _Image[1, 3] = ImageButton3; _Image[1, 4] = ImageButton4; _Image[1, 5] = ImageButton5; _Image[1, 6] = ImageButton6; _Image[1, 7] = ImageButton7; _Image[1, 8] = ImageButton8; _Image[1, 9] = ImageButton9;
_Image[2, 1] = ImageButton11; _Image[2, 2] = ImageButton12; _Image[2, 3] = ImageButton13; _Image[2, 4] = ImageButton14; _Image[2, 5] = ImageButton15; _Image[2, 6] = ImageButton16; _Image[2, 7] = ImageButton17; _Image[2, 8] = ImageButton18; _Image[2, 9] = ImageButton19;
_Image[3, 1] = ImageButton21; _Image[3, 2] = ImageButton22; _Image[3, 3] = ImageButton23; _Image[3, 4] = ImageButton24; _Image[3, 5] = ImageButton25; _Image[3, 6] = ImageButton26; _Image[3, 7] = ImageButton27; _Image[3, 8] = ImageButton28; _Image[3, 9] = ImageButton29;
_Image[4, 1] = ImageButton31; _Image[4, 2] = ImageButton32; _Image[4, 3] = ImageButton33; _Image[4, 4] = ImageButton34; _Image[4, 5] = ImageButton35; _Image[4, 6] = ImageButton36; _Image[4, 7] = ImageButton37; _Image[4, 8] = ImageButton38; _Image[4, 9] = ImageButton39;
_Image[5, 1] = ImageButton41; _Image[5, 2] = ImageButton42; _Image[5, 3] = ImageButton43; _Image[5, 4] = ImageButton44; _Image[5, 5] = ImageButton45; _Image[5, 6] = ImageButton46; _Image[5, 7] = ImageButton47; _Image[5, 8] = ImageButton48; _Image[5, 9] = ImageButton49;
_Image[6, 1] = ImageButton51; _Image[6, 2] = ImageButton52; _Image[6, 3] = ImageButton53; _Image[6, 4] = ImageButton54; _Image[6, 5] = ImageButton55; _Image[6, 6] = ImageButton56; _Image[6, 7] = ImageButton57; _Image[6, 8] = ImageButton58; _Image[6, 9] = ImageButton59;
_Image[7, 1] = ImageButton61; _Image[7, 2] = ImageButton62; _Image[7, 3] = ImageButton63; _Image[7, 4] = ImageButton64; _Image[7, 5] = ImageButton65; _Image[7, 6] = ImageButton66; _Image[7, 7] = ImageButton67; _Image[7, 8] = ImageButton68; _Image[7, 9] = ImageButton69;
_Image[8, 1] = ImageButton71; _Image[8, 2] = ImageButton72; _Image[8, 3] = ImageButton73; _Image[8, 4] = ImageButton74; _Image[8, 5] = ImageButton75; _Image[8, 6] = ImageButton76; _Image[8, 7] = ImageButton77; _Image[8, 8] = ImageButton78; _Image[8, 9] = ImageButton79;
_Image[9, 1] = ImageButton81; _Image[9, 2] = ImageButton82; _Image[9, 3] = ImageButton83; _Image[9, 4] = ImageButton84; _Image[9, 5] = ImageButton85; _Image[9, 6] = ImageButton86; _Image[9, 7] = ImageButton87; _Image[9, 8] = ImageButton88; _Image[9, 9] = ImageButton89;
_Image[10, 1] = ImageButton91; _Image[10, 2] = ImageButton92; _Image[10, 3] = ImageButton93; _Image[10, 4] = ImageButton94; _Image[10, 5] = ImageButton95; _Image[10, 6] = ImageButton96; _Image[10, 7] = ImageButton97; _Image[10, 8] = ImageButton98; _Image[10, 9] = ImageButton99;
int i, j;
for (i = 1; i <= 10; i++)
for (j = 1; j <= 9; j++)
{
_Image[i, j].ImageUrl = "~/image/back.gif";
}
}
//初始化棋盘,将两方棋子放好位
private void _InitQizi()
{
int i = 0, j = 0, k = 0;
int[] initqipandata = new int[37];
for (i = 1; i <= 10; i++)
for (j = 1; j <= 9; j++)
{
_UpdataQipan(i, j, k);
}
for (i = 0; i <= 36; i++)
initqipandata[i] = i;
_UpdataQipan(1, 1, initqipandata[8]); _UpdataQipan(1, 2, initqipandata[6]); _UpdataQipan(1, 3, initqipandata[4]); _UpdataQipan(1, 4, initqipandata[2]); _UpdataQipan(1, 5, initqipandata[1]); _UpdataQipan(1,6, initqipandata[3]); _UpdataQipan(1, 7, initqipandata[5]); _UpdataQipan(1, 8, initqipandata[7]); _UpdataQipan(1, 9, initqipandata[9]); _UpdataQipan(3, 2, initqipandata[10]); _UpdataQipan(3, 8, initqipandata[11]); _UpdataQipan(4, 1, initqipandata[12]); _UpdataQipan(4, 3, initqipandata[13]); _UpdataQipan(4, 5, initqipandata[14]); _UpdataQipan(4, 7, initqipandata[15]); _UpdataQipan(4, 9, initqipandata[16]);
_UpdataQipan(10, 1, initqipandata[28]); _UpdataQipan(10, 2, initqipandata[26]); _UpdataQipan(10, 3, initqipandata[24]); _UpdataQipan(10, 4, initqipandata[22]); _UpdataQipan(10, 5, initqipandata[21]); _UpdataQipan(10, 6, initqipandata[23]); _UpdataQipan(10, 7, initqipandata[25]); _UpdataQipan(10, 8, initqipandata[27]); _UpdataQipan(10, 9, initqipandata[29]); _UpdataQipan(8, 2, initqipandata[30]); _UpdataQipan(8, 8, initqipandata[31]); _UpdataQipan(7, 1, initqipandata[32]); _UpdataQipan(7, 3, initqipandata[33]); _UpdataQipan(7, 5, initqipandata[34]); _UpdataQipan(7, 7, initqipandata[35]); _UpdataQipan(7, 9, initqipandata[36]);
}
//获取棋子图片地址
private string _GetImageAdd(int xxx)
{
string x="" ;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select add_image from qizi where(no_qizi='"+xxx+"');", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
x = sr["add_image"].ToString();
//Session["add_image"] = x;
myconn.Close();
return x;
}
//获取点击后的图片地址
private string _GetImageDownAdd(int xxx)
{
string x ="";
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select add_image_down from qizi where(no_qizi='" + xxx + "')", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
x = sr["add_image_down"].ToString();
myconn.Close();
return x;
}
//读取鼠标点击点的坐标
private int Getpointx()
{
int x = 0;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select x from zuobiao", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
{
x = int.Parse(sr["x"].ToString());
}
myconn.Close();
return x;
}
private int Getpointy( )
{
int x = 0;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select y from zuobiao", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
{
x = int.Parse(sr["y"].ToString());
}
myconn.Close();
return x;
}
private int Getpointlastx( )
{
int x = 0;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select lastx from zuobiao", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
{
x = int.Parse(sr["lastx"].ToString());
}
myconn.Close();
return x;
}
private int Getpointlasty( )
{
int x = 0;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select lasty from zuobiao", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
{
x = int.Parse(sr["lasty"].ToString());
}
myconn.Close();
return x;
}
//写入鼠标点击点的坐标
private void Updatax(int xxx)
{
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("update zuobiao set x='" + xxx + "'", myconn);
myconn.Open();
int aa = cmd.ExecuteNonQuery();
myconn.Close();
}
private void Updatay(int yyy)
{
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("update zuobiao set y='" + yyy + "'", myconn);
myconn.Open();
int aa = cmd.ExecuteNonQuery();
myconn.Close();
}
private void Updatalastx(int lastxxx)
{
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("update zuobiao set lastx='" + lastxxx +"'" , myconn);
myconn.Open();
int aa = cmd.ExecuteNonQuery();
myconn.Close();
}
private void Updatalasty(int lastyyy)
{
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("update zuobiao set lasty='" + lastyyy +"'", myconn);
myconn.Open();
int aa = cmd.ExecuteNonQuery();
myconn.Close();
}
//以上四个函数的集合,达到一次写入四个坐标值的目的
private void _UpdataaZuobiao(int xxx, int yyy, int lastxxx, int lastyyy)
{
Updatax(xxx);
Updatay(yyy);
Updatalastx(lastxxx);
Updatalasty(lastyyy);
}
//保存当前坐标值到x和y
private void _UpdatZuobiaoXY(int xxx, int yyy)
{
if (Session["user"].ToString() == "red" && _GetUserState(Session["user"].ToString()) == 20)
{
Updatax(xxx);
Updatay(yyy);
}
if (Session["user"].ToString() == "black" && _GetUserState(Session["user"].ToString()) == 20)
{
Updatax(xxx);
Updatay(yyy);
}
}
//读取棋盘上的棋子信息
private int _GetDataQipan(int xxx, int yyy)
{
int i,data=0;
i = (xxx - 1) * 9 + yyy;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select data_qipan from qipan where(position='"+i+"')", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
data = int.Parse(sr["data_qipan"].ToString());
myconn.Close();
return data;
}
//将棋子信息写入棋盘
private void _UpdataQipan(int xxx, int yyy,int data)
{
int i;
i = (xxx - 1) * 9 + yyy;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("update qipan set data_qipan=" + data + "where (position='"+i+"')", myconn);
myconn.Open();
int aa = cmd.ExecuteNonQuery();
myconn.Close();
}
//读出用户此时状态
private int _GetUserState(string id)
{
int data = 0;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select state from yonghu where(id='" + id + "')", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
data = int.Parse(sr["state"].ToString());
myconn.Close();
return data;
}
//读出用户输赢状态 0表示在进行游戏 20表示赢 40表示输
private int _GetUserWin(string id)
{
int data = 0;
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("select winner from yonghu where(id='" + id + "')", myconn);
myconn.Open();
SqlDataReader sr = cmd.ExecuteReader();
if (sr.Read())
data = int.Parse(sr["winner"].ToString());
myconn.Close();
return data;
}
//写入用户状态
private void _UpdataUserState(string id,int sta)
{
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("update yonghu set state=" + sta + "where (id='" + id + "')", myconn);
myconn.Open();
int aa = cmd.ExecuteNonQuery();
myconn.Close();
}
//写入用户输赢状态 0表示在进行游戏 20表示赢 40表示输
private void _UpdataUserWin(string id, int sta)
{
SqlConnection myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand cmd = new SqlCommand("update yonghu set winner=" + sta + "where (id='" + id + "')", myconn);
myconn.Open();
int aa = cmd.ExecuteNonQuery();
myconn.Close();
}
protected void Page_Load(object sender, EventArgs e)
{
_Init();
// _Test();
}
//测试程序函数
private void _Test()
{
_UpdataUserState("red",tru);
_UpdataUserState("black", tru);
}
private bool _IsAbleToPut()//********************************************************需要传递x,y,laastx,lasty
{
if (Session["user"].ToString() == "red" && _GetUserState(Session["user"].ToString()) == 40)
return false;
if (Session["user"].ToString() == "black" && _GetUserState(Session["user"].ToString()) == 40)
return false;
int x, y, lastx, lasty;
int qipandata,lastqipandata;
x = Getpointx();
y = Getpointy();
lastx = Getpointlastx();
lasty = Getpointlasty();
if (Session["user"].ToString() == "black")
{
x = 11 - x;
y = 10 - y;
lastx = 11 - lastx;
lasty = 10 - lasty;
}
qipandata = _GetDataQipan(x, y);
lastqipandata = _GetDataQipan(lastx, lasty);
// if (lastqipandata==0)
// return false;
if (Session["user"].ToString() == "red"&&(lastqipandata <= 20 || qipandata >= 20))//****************************************************************现以红方为对象
return false;
if (Session["user"].ToString() == "black" && ((lastqipandata == 0 || lastqipandata >= 20) || (qipandata > 0 && qipandata <= 20)))
return false;
int i, j, c;
//将|帅
if (lastqipandata == 1 || lastqipandata == 21)
{
if ((x - lastx) * (y - lasty) != 0) return false;
if (Math.Abs(x - lastx) > 1 || Math.Abs(y - lasty) > 1) return false;
if (y < 4 || y > 6 || (x > 3 && x < 8)) return false;
return true;
}
//士|仕
if (lastqipandata == 2 || lastqipandata == 3 || lastqipandata == 22 || lastqipandata == 23)
{
if ((x - lastx) * (y - lasty) == 0) return false;
if (Math.Abs(x - lastx) > 1 || Math.Abs(y - lasty) > 1) return false;
if (y < 4 || y > 6 || (x > 3 && x < 8)) return false;
return true;
}
//象|相
if (lastqipandata == 4 || lastqipandata == 5 || lastqipandata == 24 || lastqipandata == 25)
{
if ((x - lastx) * (y - lasty) == 0) return false;
if (Math.Abs(x - lastx) != 2 || Math.Abs(y - lasty) != 2) return false;
if (Session["user"].ToString() == "red" && x < 6) return false;
if (Session["user"].ToString() == "black" && x > 5) return false;
i = 0; j = 0;//i,j必须有初始值
if (x - lastx == 2)
{
i = x - 1;
}
if (x - lastx == -2)
{
i = x + 1;
}
if (y - lasty == 2)
{
j = y - 1;
}
if (y - lasty == -2)
{
j = y + 1;
}
if (_GetDataQipan(i, j) != 0) return false;
return true;
}
//马
if (lastqipandata == 6 || lastqipandata ==