View difference between Paste ID: qVFL9ckX and pEV1Aubt
SHOW: | | - or go back to the newest paste.
1
<!DOCTYPE html>
2
<html>
3
<head>
4
<title>Chess</title>
5
<meta charset="UTF-8"/>
6
</head>
7
<body>
8
9
<?php
10
function is_black($c) {
11
	return ($c==='B'||$c==='Black');
12
}
13
function is_white($c) {
14
	return ($c==='W'||$c==='White');
15
}
16
abstract class Piece {
17
	public $x;
18
	public $y;
19
	public $color;
20
	public $parent;
21
	public function __construct(&$parent=NULL) {
22
		$this->parent=$parent;
23
	}
24
	public function can_move($diff_x, $diff_y) { return false; }
25
	public function can_eat($diff_x, $diff_y) { return $this->can_move($diff_x, $diff_y); }
26
}
27
class Pawn extends Piece {
28
	public function can_move($diff_x, $diff_y) {
29-
		/*if(is_black($c)) {
29+
		if($this->y===6) return ($diff_y<=-1 && $diff_y>=-2);
30-
			if($y===1) return ($diff_y>=1 && $diff_y<=2);
30+
		else return ($diff_y==-1);
31-
			else return ($diff_y==1);
31+
32
	public function can_eat($diff_x, $diff_y) {
33-
		elseif(is_white($c)) {//*/
33+
		return (abs($diff_x)==1 && $diff_y==-1);
34-
			if($this->y===6) return ($diff_y<=-1 && $diff_y>=-2);
34+
35-
			else return ($diff_y==-1);
35+
36-
		/*}
36+
37-
		return false;//*/
37+
38
}
39
class Rook extends Piece {
40-
		/*if(is_black($c)) {
40+
41-
			return (abs($diff_x)==1 && $diff_y==1);
41+
42
			( ($diff_x==0 && abs($diff_y)>0) || ($diff_y==0 && abs($diff_x)>0) ) &&
43-
		elseif(is_white($c)) {//*/
43+
44-
			return (abs($diff_x)==1 && $diff_y==-1);
44+
45-
		/*}
45+
46-
		return false;//*/
46+
47
	public function __toString() {
48
		return 'Rook';
49
	}
50
}
51
class Knight extends Piece {
52
	public function can_move($diff_x, $diff_y) {
53
		return ( ( abs($diff_x)>=1 && abs($diff_x)<=2 ) && ( abs($diff_y)>=1 && abs($diff_y)<=2) && ( abs($diff_x)+abs($diff_y)==3 ) );
54-
		return ( ($diff_x==0 && abs($diff_y)>0) || ($diff_y==0 && abs($diff_x)>0) );
54+
55
	public function __toString() {
56
		return 'Knight';
57
	}
58
}
59-
			$this->can_move($diff_x, $diff_y) &&
59+
class Bishop extends Piece {
60
	public function can_move($diff_x, $diff_y) {
61
		return (
62
			( abs($diff_x)==abs($diff_y) ) && abs($diff_x)>0 &&
63
			$this->parent->is_free($this->x, $this->y, $this->x+$diff_x, $this->y+$diff_y)
64
		);
65
	}
66
	public function __toString() {
67
		return 'Bishop';
68
	}
69
}
70
class King extends Piece {
71
	public function can_move($diff_x, $diff_y) {
72
		return ( abs($diff_x)<=1 && abs($diff_y)<=1 && (abs($diff_x)+abs($diff_y)>=1) );
73
	}
74
	public function __toString() {
75
		return 'King';
76
	}
77
}
78
class Queen extends Piece {
79
	public function can_move($diff_x, $diff_y) {
80
		return (
81
			(abs($diff_x)==abs(diff_y)) || ($diff_x==0 && abs($diff_y)>0) || ($diff_y==0 && abs($diff_x)>0) &&
82
			$this->parent->is_free($this->x, $this->y, $this->x+$diff_x, $this->y+$diff_y)
83
		);
84
	}
85
	public function __toString() {
86
		return 'Queen';
87
	}
88
}
89
//black up (y=0), white down (y=7)
90
class board {
91
	public $grid;
92
	public $width;
93-
			if($this->get_piece($src_x+$px*$i, $src_y+$py*$i) instanceof Piece) return false;
93+
94
	public $cur_color;
95
	public function __construct() {
96
		$this->grid=array();
97
		$this->width=8;
98
		$this->height=8;
99
		for($i=0;$i<$this->height;++$i) {
100
			$this->grid[$i]=array();
101
			for($j=0;$j<$this->width;++$j) {
102
				$this->grid[$i][$j]='&nbsp;';
103
			}
104
		}
105
	}
106-
$board->grid[7][0]='Rook';
106+
107-
$board->grid[7][1]='Knight';
107+
108-
$board->grid[7][2]='Bishop';
108+
109-
$board->grid[7][3]='Queen';
109+
110-
$board->grid[7][4]='King';
110+
111-
$board->grid[7][5]='Bishop';
111+
112-
$board->grid[7][6]='Knight';
112+
113-
for($i=0;$i<8;++$i) {
113+
114-
	$board->grid[6][$i]=new Pawn($board);
114+
115
		for($i=1; $i<max(abs($diff_x),abs($diff_y)); ++$i) {
116-
$board->grid[7][7]='Rook';
116+
			if($this->is_empty($src_x+$px*$i, $src_y+$py*$i)) return false;
117
		}
118-
var_dump($board->grid[6][0]->parent->grid[7][7]);
118+
119-
$test=new Rook($board);
119+
120-
$test->x=0;
120+
121-
$test->y=7;
121+
122-
$board->grid[7][0]=clone $test;
122+
123-
$test->x=7;
123+
124-
$board->grid[7][7]=clone $test;
124+
125-
var_dump($board->grid[7][0]->x);
125+
126
	public function add_piece($x, $y, $piece) {
127
		$p=new $piece($this);
128
		$p->x=$x;
129
		$p->y=$y;
130
		$p->color=$this->cur_color;
131
		$this->grid[$y][$x]=$p;
132
	}
133
};
134
$board=new board();
135
//var_dump($board->grid);
136
$board->cur_color='W';
137
$h=7;
138
	$board->add_piece(0, $h, 'Rook');
139
	$board->add_piece(1, $h, 'Knight');
140
	$board->add_piece(2, $h, 'Bishop');
141
	$board->add_piece(3, $h, 'Queen');
142
	$board->add_piece(4, $h, 'King');
143
	$board->add_piece(5, $h, 'Bishop');
144
	$board->add_piece(6, $h, 'Knight');
145
	$board->add_piece(7, $h, 'Rook');
146
--$h;
147
	for($i=0;$i<8;++$i) {
148
		$board->add_piece($i, $h, 'Pawn');
149
	}
150
$board->cur_color='B';
151
$h=0;
152
	$board->add_piece(0, $h, 'Rook');
153
	$board->add_piece(1, $h, 'Knight');
154
	$board->add_piece(2, $h, 'Bishop');
155
	$board->add_piece(3, $h, 'Queen');
156
	$board->add_piece(4, $h, 'King');
157
	$board->add_piece(5, $h, 'Bishop');
158
	$board->add_piece(6, $h, 'Knight');
159
	$board->add_piece(7, $h, 'Rook');
160
++$h;
161
	for($i=0;$i<8;++$i) {
162
		$board->add_piece($i, $h, 'Pawn');
163
	}
164
?><table border="1"><?php
165
for($y=0;$y<8;++$y) {
166
?>
167
	<tr>
168
<?php
169
	for($x=0;$x<8;++$x) {
170
?>		<td><?php echo $board->get_piece($x, $y); ?></td>
171
<?php
172
	}
173
?>	</tr><?php
174
}
175
?>
176
</table>
177
178
</body>
179
</html>