3D黑白棋 StarReversi

组对编程---3D黑白棋 发布

这是一个用silverlight编写的3D程序,可以360°变化视角,展开/收缩棋盘,实现了标准黑白棋股则及扩展股则(棋盘左右两边连通)

游戏有AI功能,有回放功能,回放过程中可以进入下棋模式

游戏链接:

http://home.ustc.edu.cn/~sqren/(墙内可用)

http://dl.dropbox.com/u/15667321/Reversi3D.html (墙外可用)

下载链接:

https://sites.google.com/site/starreversi/StarReversi.zip (墙外可用)

http://dl.dropbox.com/u/15667321/StarReversi.zip (墙外可用)

http://home.ustc.edu.cn/~sqren/StarReversi.zip (墙内可用)

 

3D黑白棋 StarReversi_第1张图片

 

3D黑白棋 StarReversi_第2张图片

 

code:

xmal:

 

代码
   
   
< UserControl x:Class = " Reversi3D.MainPage "
xmlns
= " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x
= " http://schemas.microsoft.com/winfx/2006/xaml "
xmlns:d
= " http://schemas.microsoft.com/expression/blend/2008 "
xmlns:mc
= " http://schemas.openxmlformats.org/markup-compatibility/2006 "
xmlns:Execution
= " clr-namespace:Balder.Execution;assembly=Balder "
xmlns:Flat
= " clr-namespace:Balder.Objects.Flat;assembly=Balder "
xmlns:View
= " clr-namespace:Balder.View;assembly=Balder "
xmlns:Geometries
= " clr-namespace:Balder.Objects.Geometries;assembly=Balder "
xmlns:Lighting
= " clr-namespace:Balder.Lighting;assembly=Balder "
xmlns:Materials
= " clr-namespace:Balder.Materials;assembly=Balder "
xmlns:Animation
= " clr-namespace:Balder.Animation.Silverlight;assembly=Balder "
xmlns:Objects
= " clr-namespace:Balder.Objects;assembly=Balder "
mc:Ignorable
= " d "
d:DesignHeight
= " 600 " d:DesignWidth = " 800 " >

< Grid x:Name = " LayoutRoot " Background = " Silver " MouseWheel = " Grid_MouseWheel " KeyDown = " LayoutRoot_KeyDown " KeyUp = " LayoutRoot_KeyUp " >

< Grid.Resources >
< Materials:Material x:Name = " WhiteMaterial " x:Key = " WhiteMaterial " ReflectionMap = " /Reversi3D;component/image/laughstar.jpg " />
< Materials:Material x:Name = " BlackMaterial " x:Key = " BlackMaterial " ReflectionMap = " /Reversi3D;component/image/bluestar.png " />
< Materials:Material x:Name = " StarReversiMaterial " x:Key = " StarReversiMaterial " DiffuseMap = " /Reversi3D;component/image/starreversi.jpg " />
< Materials:Material x:Name = " YouWinMaterial " x:Key = " YouWinMaterial " DiffuseMap = " /Reversi3D;component/image/youwin.jpg " />
< Materials:Material x:Name = " YouLoseMaterial " x:Key = " YouLoseMaterial " DiffuseMap = " /Reversi3D;component/image/youlose.jpg " />
< Materials:Material x:Name = " GameOverMaterial " x:Key = " GameOverMaterial " DiffuseMap = " /Reversi3D;component/image/gameover.jpg " />

<!-- < EventTrigger x:Key = " event " RoutedEvent = " Grid.Loaded " >
< BeginStoryboard >
< Storyboard x:Name = " boxopacity " RepeatBehavior = " Forever " >
< Animation:StoryboardExtensions.CoordinateAnimation >
< Animation:CoordinateAnimation To = " 100,100,100 " Duration = " 00:00:05 " TargetName = " bb " TargetProperty = " (Node.Position) " />
</ Animation:StoryboardExtensions.CoordinateAnimation >
</ Storyboard >
</ BeginStoryboard >
</ EventTrigger >-->

<!--< Storyboard x:Name = " leftrotation " RepeatBehavior = " Forever " >
< Animation:StoryboardExtensions.CoordinateAnimation >
< Animation:CoordinateAnimation From = " 0,0,359 " To = " 0,0,0 " Duration = " 00:00:05 " TargetName = " group " TargetProperty = " (Node.Rotation) " />
</ Animation:StoryboardExtensions.CoordinateAnimation >-->
</ Grid.Resources >

< Execution:Game Width = " 800 " Height = " 600 " >
< Execution:Game.Skybox >
< Objects:Skybox IsEnabled = " True "
Front
= " /Reversi3D;component/image/star/3.jpg "
Back
= " /Reversi3D;component/image/star/1.jpg "
Left
= " /Reversi3D;component/image/star/2.jpg "
Right
= " /Reversi3D;component/image/star/5.jpg "
Top
= " /Reversi3D;component/image/star/6.jpg "
Bottom
= " /Reversi3D;component/image/star/4.jpg "

/>
</ Execution:Game.Skybox >
< Execution:Game.Camera >
< View:Camera x:Name = " cCamera " Position = " 0, 0, -190 " Target = " 0, 0, 0 " />
</ Execution:Game.Camera >

< Lighting:OmniLight Position = " 300, 400, 400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />
< Lighting:OmniLight Position = " 300, 400, -400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />
< Lighting:OmniLight Position = " 300, -400, 400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />
< Lighting:OmniLight Position = " 300, -400, -400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />
< Lighting:OmniLight Position = " -300, 400, 400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />
< Lighting:OmniLight Position = " -300, 400, -400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />
< Lighting:OmniLight Position = " -300, -400, 400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />
< Lighting:OmniLight Position = " -300, -400, -400 " Ambient = " Black " Diffuse = " White " Specular = " boxopacity " Strength = " 0.3 " />


< Geometries:Geometry x:Name = " group " Height = " 600 " Width = " 800 " InteractionEnabled = " True " MouseLeftButtonDown = " group_MouseLeftButtonDown " MouseLeftButtonUp = " group_MouseLeftButtonUp " >
</ Geometries:Geometry >

</ Execution:Game >


< Grid HorizontalAlignment = " Left " VerticalAlignment = " Top " >
< Grid.ColumnDefinitions >
< ColumnDefinition Width = " 100 " />
</ Grid.ColumnDefinitions >

< Grid.RowDefinitions >
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 80 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 280 " />
</ Grid.RowDefinitions >

< TextBlock Text = " Reversi Mode " Grid.Column = " 0 " Grid.Row = " 1 " />
< ComboBox x:Name = " ModeComboBox " Grid.Column = " 0 " Grid.Row = " 2 " SelectedIndex = " 1 " >
< ComboBoxItem Content = " Normal " />
< ComboBoxItem Content = " Extended " />
</ ComboBox >

< TextBlock Text = " Player Number " Grid.Column = " 0 " Grid.Row = " 3 " />
< ComboBox x:Name = " PlayerNumberComboBox " Grid.Column = " 0 " Grid.Row = " 4 " SelectedIndex = " 0 " >
< ComboBoxItem Content = " Single " />
< ComboBoxItem Content = " Double " />
</ ComboBox >

< Button x:Name = " StartButton " Content = " Start " Grid.Column = " 0 " Grid.Row = " 6 " Click = " StartButton_Click " >
</ Button >

< Button x:Name = " EndThisGame " Content = " End " Grid.Column = " 0 " Grid.Row = " 8 " IsEnabled = " False " Click = " EndThisGame_Click " >
</ Button >


< Grid x:Name = " _infoBox " Grid.Column = " 0 " Grid.Row = " 10 " >

< Grid.RenderTransform >
< TranslateTransform x:Name = " _infoBoxTranslation " />
</ Grid.RenderTransform >
< Grid.Background >
< SolidColorBrush Opacity = " 0.5 " Color = " Gray " />
</ Grid.Background >
< Border BorderBrush = " White " BorderThickness = " 1 " >
< TextBlock Foreground = " White " >
< Run x:Name = " _player1name " />< Run > : </ Run >
< Run x:Name = " _player1sorce " />< LineBreak />
< Run x:Name = " _player2name " />< Run > : </ Run >
< Run x:Name = " _player2sorce " />< LineBreak />
< Run > Result: </ Run >
< Run x:Name = " _result " />< LineBreak />
</ TextBlock >
</ Border >
</ Grid >
< Grid x:Name = " _ruleBox " Grid.Column = " 0 " Grid.Row = " 12 " >

< Grid.RenderTransform >
< TranslateTransform x:Name = " _ruleBoxTranslation " />
</ Grid.RenderTransform >
< Grid.Background >
< SolidColorBrush Opacity = " 0.5 " Color = " Gray " />
</ Grid.Background >
< Border BorderBrush = " White " BorderThickness = " 1 " >
< TextBlock TextWrapping = " Wrap " Grid.Column = " 0 " Grid.Row = " 12 " >
模式说明:
< LineBreak />
Normal
-- 标准黑白棋棋规则 < LineBreak />
Extended
-- 棋盘左右两边连通 < LineBreak />
操作说明:
< LineBreak />
‘W’,’A’,’S’,’D’
-- 调整视角 < LineBreak />
‘Z’
-- 展开 / 收缩棋盘 < LineBreak />
鼠标滚轮—改变视距远近
< LineBreak />
鼠标拖动棋盘改变视角
< LineBreak />
PS:利用Replay中的Playnow功能,您可以换下AI的棋:)
</ TextBlock >
</ Border >
</ Grid >
</ Grid >

< Grid HorizontalAlignment = " Right " VerticalAlignment = " Top " >
< Grid.ColumnDefinitions >
< ColumnDefinition Width = " 100 " />
</ Grid.ColumnDefinitions >

< Grid.RowDefinitions >
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 10 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
< RowDefinition Height = " 20 " />
< RowDefinition Height = " 30 " />
</ Grid.RowDefinitions >
< TextBlock TextWrapping = " Wrap " Grid.Column = " 0 " Grid.Row = " 2 " > Replay Control </ TextBlock >
< Button x:Name = " ReplayButton " Content = " Replay " Grid.Column = " 0 " Grid.Row = " 4 " IsEnabled = " False " Click = " ReplayButton_Click " >
</ Button >
< Button x:Name = " PlayNowButton " Content = " PlayNow " Grid.Column = " 0 " Grid.Row = " 6 " IsEnabled = " False " Click = " PlayNowButton_Click " >
</ Button >
< Button x:Name = " NextButton " Content = " Next " Grid.Column = " 0 " Grid.Row = " 8 " IsEnabled = " False " Click = " NextButton_Click " >
</ Button >
< Button x:Name = " PreviousButton " Content = " Previous " Grid.Column = " 0 " Grid.Row = " 10 " IsEnabled = " False " Click = " PreviousButton_Click " >
</ Button >


</ Grid >



</ Grid >

</ UserControl >

 

xmal.cs:

 

代码
   
   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Balder.Silverlight.Content;
using Balder.Math;
using Balder.Objects.Geometries;
using Balder.Execution;
using Balder.Lighting;
using Balder.View;
using Balder.Materials;
using Balder.Objects;
using Balder.Assets;
using Balder.Animation.Silverlight;
using System.Threading;
using System.ComponentModel;
using System.Windows.Interop;



namespace Reversi3D
{
public partial class MainPage : UserControl
{
public AIChess chess = new AIChess();
public MainPage()
{
InitializeComponent();
The_Game();
}

private void The_Game()
{
Create_Tube();
Create_First_Page();
}

private void Create_First_Page()
{
m_bPictureShowBox
= new Box()
{
Name
= " PictureShowBox " ,
Dimension
= new Coordinate( 160 , 120 , 1 ),
Position
= new Coordinate( 0 , 0 , - 30 ),
Rotation
= new Coordinate( 0 , 0 , 0 )
};
m_bPictureShowBox.SetMaterialOnSide(
0 , StarReversiMaterial);

group.Children.Add(m_bPictureShowBox);
}

private void Game_Init()
{
for ( char cXName = ' a ' ; cXName <= ' h ' ; cXName ++ )
for ( char cYName = ' 1 ' ; cYName <= ' 8 ' ; cYName ++ )
{
((Cylinder)((Geometry)group.FindName(
new string ( new char [] { ' g ' , cXName, cYName }))).Children[ 1 ]).IsVisible = false ;
}

int x, y;
for (x = 1 ; x < 9 ; x ++ )
{
for (y = 1 ; y < 9 ; y ++ )
{
if (chess.board[f(x, y)] == 0 ) ;
if (chess.board[f(x, y)] == 2 ) // WHITE
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = WhiteMaterial;
}
if (chess.board[f(x, y)] == 1 ) // BLACK
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = BlackMaterial ;
}
}
}
}

private void Create_Tube()
{
Coordinate cooBoxSize
= new Coordinate(iBoxLength, iBoxWidth, iBoxHeight);
Coordinate cooBoxPosition
= new Coordinate( 0 , 0 , 0 );

double iPositionX = ( - 3.5 ) * iBoxWidth;
for ( char cXName = ' a ' ; cXName <= ' h ' ; iPositionX += iBoxWidth, cXName ++ )
{
double iPositionY = ( 3.5 ) * iBoxLength;
for ( char cYName = ' 1 ' ; cYName <= ' 8 ' ; iPositionY -= iBoxLength, cYName ++ )
{
Box bBox
= new Box()
{
Dimension
= new Coordinate(iBoxWidth, iBoxLength, iBoxHeight),
Position
= new Coordinate( 0 , 0 , 0 ),
Rotation
= new Coordinate( 0 , 0 , 0 ),
Name
= new System.String( new char [] { cXName, cYName })
};
bBox.Color
= ((cXName - ' a ' + cYName) % 2 == 0 ) ? Balder.Color.FromArgb( 255 , 79 , 0 , 3 ) : Balder.Color.FromArgb( 255 , 254 , 254 , 228 );

Cylinder cyChessman
= new Cylinder
{
TopRadius
= 5 ,
BottomRadius
= 5 ,
Segments
= 20 ,
Size
= 3 ,
Position
= new Coordinate( 0 , 0 , - 2.5 ),
Name
= new System.String( new char [] { ' c ' , cXName, cYName }),
IsVisible
= false
};
// cyChessman.Material = ((cXName - 'a' + cYName) % 2 == 0) ? BlackMaterial : WhiteMaterial;
cyChessman.Rotation = new Coordinate( 90 , 0 , 0 );

Geometry minGroup
= new Geometry()
{
Name
= new System.String( new char [] { ' g ' , cXName, cYName }),
Position
= new Coordinate(iPositionX, iPositionY, - iBoxWidth / 2 / Math.Sin(double_to_angle( 22.5 ))),
Rotation
= new Coordinate( 0 , 0 , 0 )
};
minGroup.Children.Add(bBox);
minGroup.Children.Add(cyChessman);
group.Children.Add(minGroup);
}
}
Cylinder cyInner
= new Cylinder()
{
BottomRadius
= iBoxWidth / 2 / Math.Sin(double_to_angle( 22.5 )),
TopRadius
= iBoxWidth / 2 / Math.Sin(double_to_angle( 22.5 )),
Segments
= 8 ,
Position
= new Coordinate( 0 , 0 , 0 ),
Size
= 8 * iBoxLength + 4 ,
Name
= " inner "
};
cyInner.Color
= Balder.Color.FromArgb( 255 , 48 , 4 , 121 );
group.Children.Add(cyInner);
}

private void Board_Retract()
{
if ( ! bRetractInit)
{
bRetractInit
= true ;
Init_Board_Retract_Anmition();
}
if (bSpeared == true )
{
if (bRetractFinish == true )
{
bRetractFinish
= false ;
LayoutRoot.Resources.Add(
" retract " , sbBoard_Retract);
sbBoard_Retract.Begin();
}
}
}

private void sbBoard_Retract_Completed( object sender, EventArgs e)
{
bRetractFinish
= true ;
LayoutRoot.Resources.Remove(
" retract " );
bSpeared
= false ;
}

private void Init_Board_Retract_Anmition()
{
sbBoard_Retract
= new Storyboard();
sbBoard_Retract.Completed
+= new EventHandler(sbBoard_Retract_Completed);


Duration duration
= new System.TimeSpan( 0 , 0 , 5 );
sbBoard_Retract.Duration
= duration;
Coordinate cooPosition;
Coordinate cooRotation;
double iPositionX = ( - 3.5 ) * iBoxWidth;
for ( char cXName = ' a ' ; cXName <= ' h ' ; iPositionX += iBoxWidth, cXName ++ )
{
double iPositionY = ( 3.5 ) * iBoxLength;
for ( char cYName = ' 1 ' ; cYName <= ' 8 ' ; iPositionY -= iBoxLength, cYName ++ )
{
cooPosition
= ((Geometry)group.FindName( new System.String(( new char [] { ' g ' , cXName, cYName })))).Position;
cooRotation
= ((Geometry)group.FindName( new System.String(( new char [] { ' g ' , cXName, cYName })))).Rotation;
DoubleAnimation dAnimationPX
= new DoubleAnimation()
{
From
= cooPosition.X,
To
= dLengthX[cXName - ' a ' ],
Duration
= duration
};
sbBoard_Retract.Children.Add(dAnimationPX);
Storyboard.SetTargetName(dAnimationPX,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dAnimationPX,
new PropertyPath( " (Node.Position).(X) " ));

DoubleAnimation dAnimationPY
= new DoubleAnimation()
{
From
= cooPosition.Y,
To
= iPositionY,
Duration
= duration
};
sbBoard_Retract.Children.Add(dAnimationPY);
Storyboard.SetTargetName(dAnimationPY,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dAnimationPY,
new PropertyPath( " (Node.Position).(Y) " ));

DoubleAnimation dAnimationPZ
= new DoubleAnimation()
{
From
= cooPosition.Z,
To
= dLengthZ[cXName - ' a ' ],
Duration
= duration
};
sbBoard_Retract.Children.Add(dAnimationPZ);
Storyboard.SetTargetName(dAnimationPZ,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dAnimationPZ,
new PropertyPath( " (Node.Position).(Z) " ));

DoubleAnimation dRoationPY
= new DoubleAnimation()
{
From
= cooRotation.Y,
To
= dRotationY[cXName - ' a ' ],
Duration
= duration
};
sbBoard_Retract.Children.Add(dRoationPY);
Storyboard.SetTargetName(dRoationPY,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dRoationPY,
new PropertyPath( " (Node.Rotation).(Y) " ));

}
}
}

private void Board_Spread()
{
if ( ! bSpeareInit)
{
bSpeareInit
= true ;
Init_Board_Spread_Anmition();
}
if (bSpeared == false )
{
if (bSpeareFinish == true )
{
bSpeareFinish
= false ;
LayoutRoot.Resources.Add(
" spread " , sbBoard_Spread);
sbBoard_Spread.Begin();
}
}
}

private void sbBoard_Spread_Completed( object sender, EventArgs e)
{
// sbBoard_Spread.Stop();
LayoutRoot.Resources.Remove( " spread " );
bSpeareFinish
= true ;
bSpeared
= true ;
}

private void Init_Board_Spread_Anmition()
{
sbBoard_Spread
= new Storyboard();
sbBoard_Spread.Completed
+= new EventHandler(sbBoard_Spread_Completed);

Duration duration
= new System.TimeSpan( 0 , 0 , 5 );
sbBoard_Spread.Duration
= duration;
Coordinate cooPosition;
Coordinate cooRotation;

double iPositionX = ( - 3.5 ) * iBoxWidth;
for ( char cXName = ' a ' ; cXName <= ' h ' ; iPositionX += iBoxWidth, cXName ++ )
{
double iPositionY = ( 3.5 ) * iBoxLength;
for ( char cYName = ' 1 ' ; cYName <= ' 8 ' ; iPositionY -= iBoxLength, cYName ++ )
{
cooPosition
= ((Geometry)group.FindName( new System.String(( new char [] { ' g ' , cXName, cYName })))).Position;
cooRotation
= ((Geometry)group.FindName( new System.String(( new char [] { ' g ' , cXName, cYName })))).Rotation;
DoubleAnimation dAnimationPX
= new DoubleAnimation()
{
From
= cooPosition.X,
To
= iPositionX,
Duration
= duration
};
sbBoard_Spread.Children.Add(dAnimationPX);
Storyboard.SetTargetName(dAnimationPX,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dAnimationPX,
new PropertyPath( " (Node.Position).(X) " ));

DoubleAnimation dAnimationPY
= new DoubleAnimation()
{
From
= cooPosition.Y,
To
= iPositionY,
Duration
= duration
};
sbBoard_Spread.Children.Add(dAnimationPY);
Storyboard.SetTargetName(dAnimationPY,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dAnimationPY,
new PropertyPath( " (Node.Position).(Y) " ));

DoubleAnimation dAnimationPZ
= new DoubleAnimation()
{
From
= cooPosition.Z,
To
= - iBoxWidth / 2 / Math.Sin(double_to_angle( 22.5 )),
Duration
= duration
};
sbBoard_Spread.Children.Add(dAnimationPZ);
Storyboard.SetTargetName(dAnimationPZ,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dAnimationPZ,
new PropertyPath( " (Node.Position).(Z) " ));

DoubleAnimation dRoationPY
= new DoubleAnimation()
{
From
= cooRotation.Y,
To
= 0 ,
Duration
= duration
};
sbBoard_Spread.Children.Add(dRoationPY);
Storyboard.SetTargetName(dRoationPY,
new System.String(( new char [] { ' g ' , cXName, cYName })));
Storyboard.SetTargetProperty(dRoationPY,
new PropertyPath( " (Node.Rotation).(Y) " ));

}
}
}

private double double_to_angle( double input)
{
return input * Math.PI / 180 ;
}

private void sbChessman_Anmition1_Completed( object sender, EventArgs e)
{
sbChessman_Anmition.Stop();
LayoutRoot.Resources.Remove(
" chessman_anmition1 " );
sbChessman_Anmition.Children.Clear();
sbChessman_Anmition
= null ;
foreach ( string chessman in m_sTargetChessmen)
{

((Cylinder)((Geometry)group.FindName(
" g " + chessman)).Children[ 1 ]).Material
= chess.colour == 1 ? WhiteMaterial : BlackMaterial;
}
Chessman_Anmition2();
}
private void sbChessman_Anmition2_Completed( object sender, EventArgs e)
{
sbChessman_Anmition.Stop();
LayoutRoot.Resources.Remove(
" chessman_anmition2 " );
sbChessman_Anmition.Children.Clear();
sbChessman_Anmition
= null ;
if (bEnded == true )
{
bChessTrunarounded
= true ;
return ;
}
if (chess.CanGoOrNot() == false )
{
chess.colour
= 3 - chess.colour;
if (m_mode == MODEDEFINE.SING2D || m_mode == MODEDEFINE.SING3D)
bAIturn
= bAIturn ? false : true ;
if (bAIturn)
Lock
= 1 ;
else Lock = 0 ;
}

if (m_mode == MODEDEFINE.DOUBLE2D || m_mode == MODEDEFINE.DOUBLE3D)
{
bAIturn
= false ;
Lock
= 0 ;
}
if (bAIturn)
{
Thread tAIthread
= new Thread(ComputerChessTurn);
tAIthread.Start();
bAIturn
= false ;
}
bChessTrunarounded
= true ;
}

private void Chessman_Anmition1()
{
sbChessman_Anmition
= new Storyboard();
sbChessman_Anmition.Completed
+= new EventHandler(sbChessman_Anmition1_Completed);
LayoutRoot.Resources.Add(
" chessman_anmition1 " , sbChessman_Anmition);
Duration duration
= new System.TimeSpan( 0 , 0 , 0 , 0 , 400 );

foreach ( string chessman in m_sTargetChessmen)
{
DoubleAnimation dAnimationPZ
= new DoubleAnimation
{
From
= - 2.5 ,
To
= - 18 ,
Duration
= duration
};
sbChessman_Anmition.Children.Add(dAnimationPZ);
Storyboard.SetTargetName(dAnimationPZ,
' c ' + chessman);
Storyboard.SetTargetProperty(dAnimationPZ,
new PropertyPath( " (Node.Position).(Z) " ));

DoubleAnimation dAnimationRY
= new DoubleAnimation
{
From
= ((Cylinder)((Geometry)group.FindName( ' g ' + chessman)).Children[ 1 ]).Rotation.Y,
To
= ((Cylinder)((Geometry)group.FindName( ' g ' + chessman)).Children[ 1 ]).Rotation.Y + 90 ,
Duration
= duration,
SpeedRatio
= 1
};
sbChessman_Anmition.Children.Add(dAnimationRY);
Storyboard.SetTargetName(dAnimationRY,
' c ' + chessman);
Storyboard.SetTargetProperty(dAnimationRY,
new PropertyPath( " (Node.Rotation).(Y) " ));
}
sbChessman_Anmition.Begin();
}
private void Chessman_Anmition2()
{
sbChessman_Anmition
= new Storyboard();
sbChessman_Anmition.Completed
+= new EventHandler(sbChessman_Anmition2_Completed);
LayoutRoot.Resources.Add(
" chessman_anmition2 " , sbChessman_Anmition);
Duration duration
= new System.TimeSpan( 0 , 0 , 0 , 0 , 400 );

foreach ( string chessman in m_sTargetChessmen)
{
DoubleAnimation dAnimationPZ
= new DoubleAnimation
{
From
= - 18 ,
To
= - 2.5 ,
Duration
= duration
};
sbChessman_Anmition.Children.Add(dAnimationPZ);
Storyboard.SetTargetName(dAnimationPZ,
' c ' + chessman);
Storyboard.SetTargetProperty(dAnimationPZ,
new PropertyPath( " (Node.Position).(Z) " ));

DoubleAnimation dAnimationRY
= new DoubleAnimation
{
From
= ((Cylinder)((Geometry)group.FindName( ' g ' + chessman)).Children[ 1 ]).Rotation.Y + 90 ,
To
= ((Cylinder)((Geometry)group.FindName( ' g ' + chessman)).Children[ 1 ]).Rotation.Y + 180 ,
Duration
= duration,
SpeedRatio
= 1
};
sbChessman_Anmition.Children.Add(dAnimationRY);
Storyboard.SetTargetName(dAnimationRY,
' c ' + chessman);
Storyboard.SetTargetProperty(dAnimationRY,
new PropertyPath( " (Node.Rotation).(Y) " ));
}
sbChessman_Anmition.Begin();
}

private void Chessman_TurnAround()
{
if ( ! bChessTrunarounded)
return ;
bChessTrunarounded
= false ;
Chessman_Anmition1();
}

private void set_Camera_Position()
{
if (m_viewAngleYZ == 90 || m_viewAngleYZ == 270 )
cCamera.Up
= - cCamera.Up;
cCamera.Position.Z
= - iViewLength * Math.Cos(double_to_angle(m_viewAngleXZ)) * Math.Cos(double_to_angle(m_viewAngleYZ));
cCamera.Position.X
= iViewLength * Math.Sin(double_to_angle(m_viewAngleXZ)) * Math.Cos(double_to_angle(m_viewAngleYZ));
cCamera.Position.Y
= iViewLength * Math.Sin(double_to_angle(m_viewAngleYZ));
}

private void Grid_MouseWheel( object sender, MouseWheelEventArgs e)
{
if (e.Delta > 0 )
{
iViewLength
-= iViewLength / 15 ;
set_Camera_Position();
}
if (e.Delta < 0 )
{
iViewLength
+= iViewLength / 15 ;
set_Camera_Position();
}
}

private void LayoutRoot_KeyDown( object sender, KeyEventArgs e)
{
if (e.Key == Key.W)
{
m_viewAngleYZ
= ( ++ m_viewAngleYZ) % 360 ;
set_Camera_Position();
}
if (e.Key == Key.S)
{
m_viewAngleYZ
= ( -- m_viewAngleYZ) % 360 ;
set_Camera_Position();
}
if (e.Key == Key.A)
{
m_viewAngleXZ
= ( -- m_viewAngleXZ) % 360 ;
set_Camera_Position();
}
if (e.Key == Key.D)
{
m_viewAngleXZ
= ( ++ m_viewAngleXZ) % 360 ;
set_Camera_Position();
}
if (e.Key == Key.Z)
{
if (bSpeared)
Board_Retract();
else
Board_Spread();
}
if (e.Key == Key.T)
{
Content contentObject
= Application.Current.Host.Content;
contentObject.IsFullScreen
= ! contentObject.IsFullScreen;
}
}

private void LayoutRoot_KeyUp( object sender, KeyEventArgs e)
{


}

private void group_MouseLeftButtonDown( object sender, Balder.Input.MouseButtonEventArgs args)
{
sClickedBox
= (args.OriginalSource.Name);
// attention!!! is box???
// ((Box)args.OriginalSource).Color = Colors.Red;
}

private void group_MouseLeftButtonUp( object sender, Balder.Input.MouseButtonEventArgs args)
{
if (bReplay == true )
return ;
if (Lock == 0 && bChessTrunarounded == true )
{
if (sClickedBox == (args.OriginalSource.Name) &&
args.OriginalSource.Name
!= " inner " &&
(args.OriginalSource.GetType().ToString()
== " Balder.Objects.Geometries.Box " ||
args.OriginalSource.GetType().ToString()
== " Balder.Objects.Geometries.Cylinder " ))
{
string sBoxName = args.OriginalSource.Name.Length == 2 ?
args.OriginalSource.Name : args.OriginalSource.Name.Remove(
0 , 1 );
if (chess.ChangeBoard(sBoxName) != - 1 )
{
draw();
Lock
= 1 ;
if (chess.NewGameOrNot())
{
bEnded
= true ;
Game_Over_Show_Picture(chess.WinSignal);
}


// BackgroundWorker bw = new BackgroundWorker();
// bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
// bw.DoWork += new DoWorkEventHandler(ComputerChessTurn);
// bw.RunWorkerAsync();

bAIturn
= true ;



}
}
else
sClickedBox
= null ;
}
}


// public void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
// {
// if (e.Result.ToString() != "-1")
// draw();
// Lock = 0; // IN IF OR NOT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// }

// public void ComputerChessTurn(object sender, DoWorkEventArgs e)
// {
// e.Result = chess.ComputerTurn();

// }

public void ComputerChessTurn()
{
if (chess.ComputerTurn() != - 1 )
{
this .Dispatcher.BeginInvoke(() => {
draw();
Lock
= 0 ;
if (chess.NewGameOrNot())
{
bEnded
= true ;
Game_Over_Show_Picture(chess.WinSignal);

}
});
}
}

public void draw()
{
((Cylinder)((Geometry)group.FindName(
" g " + chess.TurnGridArray[chess.TurnGridArray.Count - 1 ])).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
" g " + chess.TurnGridArray[chess.TurnGridArray.Count - 1 ])).Children[ 1 ]).Material =
(chess.colour
== 1 ? WhiteMaterial : BlackMaterial);
if (bReplay == false )
{
m_sPositionRecord.Add(chess.TurnGridArray[chess.TurnGridArray.Count
- 1 ]);
}
chess.TurnGridArray.RemoveAt(chess.TurnGridArray.Count
- 1 );
m_sTargetChessmen
= chess.TurnGridArray;
Chessman_TurnAround();
_player1sorce.Text
= chess.black.ToString();
_player2sorce.Text
= chess.white.ToString();
return ;
}

private void Mode_Choice()
{
switch (ModeComboBox.SelectedIndex)
{
case 0 :
chess.ChangeMode(
2 );
switch (PlayerNumberComboBox.SelectedIndex)
{
case 0 :
m_mode
= MODEDEFINE.SING2D;
break ;
case 1 :
m_mode
= MODEDEFINE.DOUBLE2D;
break ;
default :
break ;

}
break ;
case 1 :
chess.ChangeMode(
3 );
switch (PlayerNumberComboBox.SelectedIndex)
{
case 0 :
m_mode
= MODEDEFINE.SING3D;
break ;
case 1 :
m_mode
= MODEDEFINE.DOUBLE3D;
break ;
default :
break ;

}
break ;
default :
m_mode
= MODEDEFINE.SING3D;
break ;
}
m_SelectedMode
= m_mode;
}

private void Game_Over_Show_Picture(WhoWin whowin)
{
if (bExchangeSide == true && ((m_SelectedMode == MODEDEFINE.SING2D || m_SelectedMode == MODEDEFINE.SING3D)))
{
switch (whowin)
{
case WhoWin.WhiteWin:
whowin
= WhoWin.BlackWin;
break ;
case WhoWin.BlackWin:
whowin
= WhoWin.WhiteWin;
break ;
case WhoWin.Draw:
break ;
default :
break ;
}
}
if (m_mode == MODEDEFINE.DOUBLE2D || m_mode == MODEDEFINE.DOUBLE3D)
{
m_bPictureShowBox.Material
= GameOverMaterial;
switch (whowin)
{
case WhoWin.WhiteWin:
_result.Text
= " Player2 win! " ;
break ;
case WhoWin.BlackWin:
_result.Text
= " Player1 win! " ;
break ;
case WhoWin.Draw:
_result.Text
= " Draw! " ;
break ;
default :
break ;
}
}
else
switch (whowin)
{
case WhoWin.WhiteWin:
_result.Text
= " You lose! " ;
m_bPictureShowBox.Material
= YouLoseMaterial;
break ;
case WhoWin.BlackWin:
_result.Text
= " You win! " ;
m_bPictureShowBox.Material
= YouWinMaterial;
break ;
case WhoWin.Draw:
_result.Text
= " Draw! " ;
m_bPictureShowBox.Material
= GameOverMaterial;
break ;
default :
break ;
}
group.World.M11
= 1 ;
group.World.M12
= 0 ;
group.World.M13
= 0 ;
group.World.M14
= 0 ;
group.World.M21
= 0 ;
group.World.M22
= 1 ;
group.World.M23
= 0 ;
group.World.M24
= 0 ;
group.World.M31
= 0 ;
group.World.M32
= 0 ;
group.World.M33
= 1 ;
group.World.M34
= 0 ;
group.World.M41
= 0 ;
group.World.M42
= 0 ;
group.World.M43
= 0 ;
group.World.M44
= 1 ;

LayoutRoot.UpdateLayout();
if (group.Children.Contains(m_bPictureShowBox) == true )
group.Children.Remove(m_bPictureShowBox);
if (group.Children.Contains(m_bPictureShowBox) == false )
group.Children.Add(m_bPictureShowBox);
}

private void Game_Start()
{
group.Children.Remove(m_bPictureShowBox);
if (m_mode == MODEDEFINE.SING2D || m_mode == MODEDEFINE.SING3D)
{
_player1name.Text
= " You " ;
_player2name.Text
= " AI " ;
}
else
{
_player1name.Text
= " Player1 " ;
_player2name.Text
= " Player2 " ;
}
_player1sorce.Text
= " 2 " ;
_player2sorce.Text
= " 2 " ;
if (m_mode == MODEDEFINE.DOUBLE3D || m_mode == MODEDEFINE.SING3D)
Board_Retract();
else
Board_Spread();
}

private void StartButton_Click( object sender, RoutedEventArgs e)
{
m_sPositionRecord
= new List < string > ();
StartButton.IsEnabled
= false ;
ReplayButton.IsEnabled
= false ;
ModeComboBox.IsEnabled
= false ;
PlayerNumberComboBox.IsEnabled
= false ;
PlayNowButton.IsEnabled
= false ;
EndThisGame.IsEnabled
= true ;
NextButton.IsEnabled
= false ;
PreviousButton.IsEnabled
= false ;
bAIturn
= false ;
bExchangeSide
= false ;
Lock
= 0 ;
bChessTrunarounded
= true ;
bEnded
= false ;
bReplay
= false ;
_result.Text
= "" ;
chess.NEW(
3 );
Game_Init();
Mode_Choice();
Game_Start();
if (group.Children.Contains(m_bPictureShowBox) == true )
group.Children.Remove(m_bPictureShowBox);
}

private void ReplayButton_Click( object sender, RoutedEventArgs e)
{
if (m_sPositionRecord.Count == 0 )
return ;
if (m_sTargetChessmen.Count == 0 )
{
NextButton.IsEnabled
= false ;
}
else
NextButton.IsEnabled
= true ;
StartButton.IsEnabled
= false ;
PreviousButton.IsEnabled
= false ;
PlayNowButton.IsEnabled
= true ;
EndThisGame.IsEnabled
= true ;
bExchangeSide
= false ;
bAIturn
= false ;
Lock
= 0 ;
bChessTrunarounded
= true ;
bEnded
= false ;
bReplay
= true ;
bAIturnInReplay
= false ;
m_iReplayIndex
= 0 ;
bPreviousDraw
= false ;
m_boardRecord
= new List < int [] > ();
m_blackRecord
= new List < int > ();
m_whiteRecord
= new List < int > ();
m_colourRecord
= new List < int > ();
_result.Text
= "" ;
if (m_SelectedMode == MODEDEFINE.DOUBLE2D || m_SelectedMode == MODEDEFINE.SING2D)
chess.NEW(
2 );
else
chess.NEW(
3 );
Game_Init();
Game_Start();
if (m_mode == MODEDEFINE.DOUBLE2D || m_mode == MODEDEFINE.SING2D)
m_mode
= MODEDEFINE.DOUBLE2D;
else
m_mode
= MODEDEFINE.DOUBLE3D;
if (group.Children.Contains(m_bPictureShowBox) == true )
group.Children.Remove(m_bPictureShowBox);
}

private void PlayNowButton_Click( object sender, RoutedEventArgs e)
{
int x, y;
for (x = 1 ; x < 9 ; x ++ )
{
for (y = 1 ; y < 9 ; y ++ )
{
if (chess.board[f(x, y)] == 0 )
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = false ;
if (chess.board[f(x, y)] == 2 ) // WHITE
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = WhiteMaterial;
}
if (chess.board[f(x, y)] == 1 ) // BLACK
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = BlackMaterial;
}
}
}
bReplay
= false ;
m_sPositionRecord.RemoveRange(m_iReplayIndex, m_sPositionRecord.Count
- m_iReplayIndex);
m_mode
= m_SelectedMode;
StartButton.IsEnabled
= false ;
ReplayButton.IsEnabled
= false ;
ModeComboBox.IsEnabled
= false ;
PlayerNumberComboBox.IsEnabled
= false ;
PlayNowButton.IsEnabled
= false ;
EndThisGame.IsEnabled
= true ;
NextButton.IsEnabled
= false ;
PreviousButton.IsEnabled
= false ;
// bAIturn = bAIturnInReplay; // 是否可换下AI的棋
if ( bAIturnInReplay == true
&& (m_SelectedMode == MODEDEFINE.SING2D || m_SelectedMode == MODEDEFINE.SING3D) )
{
bExchangeSide
= true ;
_player1name.Text
= " AI " ;
_player2name.Text
= " You " ;
}

if (bEnded == true )
{
bChessTrunarounded
= true ;
return ;
}
if (chess.CanGoOrNot() == false )
{
chess.colour
= 3 - chess.colour;
if (m_mode == MODEDEFINE.SING2D || m_mode == MODEDEFINE.SING3D)
bAIturn
= bAIturn ? false : true ;
if (bAIturn)
Lock
= 1 ;
else Lock = 0 ;
}

if (m_mode == MODEDEFINE.DOUBLE2D || m_mode == MODEDEFINE.DOUBLE3D)
{
bAIturn
= false ;
Lock
= 0 ;
}
if (bAIturn)
{
Thread tAIthread
= new Thread(ComputerChessTurn);
tAIthread.Start();
bAIturn
= false ;
}
}

private void NextButton_Click( object sender, RoutedEventArgs e)
{
int x, y;
for (x = 1 ; x < 9 ; x ++ )
{
for (y = 1 ; y < 9 ; y ++ )
{
if (chess.board[f(x, y)] == 0 )
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = false ;
if (chess.board[f(x, y)] == 2 ) // WHITE
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = WhiteMaterial;
}
if (chess.board[f(x, y)] == 1 ) // BLACK
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = BlackMaterial;
}
}
}
int [] tempBoard = new int [ 91 ];
for ( int i = 0 ; i < 91 ; i ++ )
tempBoard[i]
= chess.board[i];
m_boardRecord.Add(tempBoard);
m_blackRecord.Add(chess.black);
m_whiteRecord.Add(chess.white);
m_colourRecord.Add(chess.colour);
PreviousButton.IsEnabled
= true ;
bAIturnInReplay
= (chess.colour == 1 ? true : false ); // 是否可换下AI的棋
if (chess.ChangeBoard(m_sPositionRecord[m_iReplayIndex]) != - 1 )
{
m_iReplayIndex
++ ;
if (m_iReplayIndex == m_sPositionRecord.Count)
{
NextButton.IsEnabled
= false ;
}
draw();
Lock
= 1 ;
if (chess.NewGameOrNot())
{
bEnded
= true ;
Game_Over_Show_Picture(chess.WinSignal);
}


// BackgroundWorker bw = new BackgroundWorker();
// bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
// bw.DoWork += new DoWorkEventHandler(ComputerChessTurn);
// bw.RunWorkerAsync();

bAIturn
= true ;
// Thread tAIthread = new Thread(ComputerChessTurn);

// tAIthread.Start();
}
}

private void PreviousButton_Click( object sender, RoutedEventArgs e)
{
chess.board
= m_boardRecord[m_boardRecord.Count - 1 ];
chess.black
= m_blackRecord[m_blackRecord.Count - 1 ];
chess.white
= m_whiteRecord[m_whiteRecord.Count - 1 ];
chess.colour
= m_colourRecord[m_colourRecord.Count - 1 ];
m_boardRecord.RemoveAt(m_boardRecord.Count
- 1 );
m_blackRecord.RemoveAt(m_blackRecord.Count
- 1 );
m_whiteRecord.RemoveAt(m_whiteRecord.Count
- 1 );
m_colourRecord.RemoveAt(m_colourRecord.Count
- 1 );
m_iReplayIndex
-- ;
NextButton.IsEnabled
= true ;
if (m_iReplayIndex == 0 )
PreviousButton.IsEnabled
= false ;
int x, y;
for (x = 1 ; x < 9 ; x ++ )
{
for (y = 1 ; y < 9 ; y ++ )
{
if (chess.board[f(x, y)] == 0 )
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = false ;
if (chess.board[f(x, y)] == 2 ) // WHITE
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = WhiteMaterial;
}
if (chess.board[f(x, y)] == 1 ) // BLACK
{
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).IsVisible = true ;
((Cylinder)((Geometry)group.FindName(
new System.String( new char [] { ' g ' , ( char )(x - 1 + ' a ' ), ( char )(y - 1 + ' 1 ' ) }))).Children[ 1 ]).Material = BlackMaterial;
}
}
}
}

private void EndThisGame_Click( object sender, RoutedEventArgs e)
{
StartButton.IsEnabled
= true ;
ReplayButton.IsEnabled
= true ;
ModeComboBox.IsEnabled
= true ;
PlayerNumberComboBox.IsEnabled
= true ;
EndThisGame.IsEnabled
= false ;
WhoWin Winsignal
= new WhoWin();
if (chess.white > chess.black) Winsignal = WhoWin.WhiteWin;
if (chess.white < chess.black) Winsignal = WhoWin.BlackWin;
if (chess.white == chess.black) Winsignal = WhoWin.Draw;
Game_Over_Show_Picture(Winsignal);
}

private int f( int x, int y) { return (x * 9 + y); }
const int iBoxHeight = 1 ;
const int iBoxWidth = 20 ;
const int iBoxLength = 15 ;
private int Lock = 0 ;
private bool bEnded = false ;
private int m_viewAngleXZ = 0 ;
private int m_viewAngleYZ = 0 ;
private Storyboard sbBoard_Spread;
private Storyboard sbBoard_Retract;
private Storyboard sbChessman_Anmition;
int iViewLength = 190 ;
static double dSin225 = Math.Sin( 22.5 * Math.PI / 180 );
static double dCos225 = Math.Cos( 22.5 * Math.PI / 180 );
static double dTan225 = Math.Tan( 22.5 * Math.PI / 180 );
static double dConstdl1 = iBoxWidth / 2 * dCos225;
static double dConstdl2 = iBoxWidth / 2 / dTan225 * dCos225;
double [] dLengthX = { - dConstdl1, - dConstdl2, - dConstdl2, - dConstdl1, dConstdl1, dConstdl2, dConstdl2, dConstdl1 };
double [] dLengthZ = { dConstdl2, dConstdl1, - dConstdl1, - dConstdl2, - dConstdl2, - dConstdl1, dConstdl1, dConstdl2 };
double [] dRotationY = { 157.5 , 112.5 , 67.5 , 22.5 , - 22.5 , - 67.5 , - 112.5 , - 157.5 };
private bool bSpeareInit = false ;
private bool bRetractInit = false ;
private bool bSpeareFinish = true ;
private bool bRetractFinish = true ;
private bool bExchangeSide = false ;
private string sClickedBox;
private bool bSpeared = true ;
private bool bChessTrunarounded = true ;
private bool bAIturn = false ;
private MODEDEFINE m_mode = new MODEDEFINE();
private Box m_bPictureShowBox;
private List < string > m_sTargetChessmen;
private List < string > m_sPositionRecord;
private List < int [] > m_boardRecord;
private List < int > m_blackRecord;
private List < int > m_whiteRecord;
private List < int > m_colourRecord;
private bool bReplay = false ;
private int m_iReplayIndex = 0 ;
private bool bAIturnInReplay = false ;
private bool bPreviousDraw = false ;
private MODEDEFINE m_SelectedMode = new MODEDEFINE();
enum MODEDEFINE: int
{
SING2D
= 1 ,
DOUBLE2D,
SING3D,
DOUBLE3D
};
}
}

 

 

 

你可能感兴趣的:(tar)