2024年1月22日发(作者:)
package ;
import ;
import ;
import cs;
import ssException;
import t;
import vent;
import istener;
import edImage;
import ;
import ption;
import O;
import ;
import nPane;
public class FiveChessFrame extends JFrame implements MouseListener,Runnable {
// 获取屏幕宽度
int width = aultToolkit().getScreenSize().width;
// 获取屏幕长度
int height = aultToolkit().getScreenSize().height;
// 背景图片
BufferedImage bgimage = null;
// 保存棋子坐标
int x = 0;
int y = 0;
// 保存之前下過的全部棋子的座標
// 其中數據內容 0 表示 這個點並沒有棋子,1 表示這個點是黑子,表示這個點是
白點
int[][] allChess = new int[19][19];
// 标示当前是黑棋
boolean isBlack = true;
// 标识当前游戏是否可以继续
boolean canPlay = true;
//提示信息
String message="黑方先行";
//保存最多拥有时间(秒)
int maxTime= 0;
//做倒计时的线程类
Thread t=new Thread(this);
//保存黑白与白方的剩余时间
int blackTime=0;
2
int whiteTime=0;
//保存时间信息
String blackMessage="无限制";
String whiteMessage="无限制";
public FiveChessFrame() {
// 設置標題
le("五子棋");
// 設置窗體大小
e(500, 500);
// 設置窗體出現位置
ation((width - 500) / 2, (height - 500) / 2);
// 大小不可變
izable(false);
// 關閉
aultCloseOperation(_ON_CLOSE);
// 顯示
ible(true);
//将窗体加入监听器
seListener(this);
();
d();
//刷新屏幕,防止游戏打开时 无法显示。
t();
try {
bgimage = (new File("F:/"));
} catch (IOException e) {
// TODO Auto-generated catch block
tackTrace();
}
}
public void paint(Graphics g) {
//双缓冲技术 防止画面闪烁
BufferedImage bi=new BufferedImage(500, 500,_INT_ARGB );
Graphics g2=Graphics();
age(bgimage, 3, 22, this);
t(new Font("宋体", , 20));
or();
ring("游戏信息:"+message, 120, 60);
t(new Font("华文行楷", 0, 18));
// 设置时间界面
ring("黑方时间:"+blackMessage, 28, 470);
ring(" 白方时间:"+whiteMessage, 250, 470);
for (int i = 0; i < 19; i++) {
// 画棋盘线
ne(13, 72 + 20 * i, 373, 72 + 20 * i);
ne(13 + 20 * i, 72, 13 + 20 * i, 432);
}
// 标注点位
al(71, 130, 4, 4);
al(71, 370, 4, 4);
al(311, 130, 4, 4);
al(311, 370, 4, 4);
al(191, 250, 5, 5);
al(71, 250, 4, 4);
al(311, 250, 4, 4);
al(191, 130, 4, 4);
al(191, 370, 4, 4);
// 繪製棋子
/*
* x= (x-13)/20*20+10; y=(y-72)/20*20+70; al(x-4, y-4, 10,10);
*/
// 繪製全部棋子
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
if (allChess[i][j] == 1) {
// 黑子
int tempX = i * 20 + 13;
int tempY = j * 20 + 73;
al(tempX - 7, tempY - 7, 14, 14);
}
if (allChess[i][j] == 2) {
// 繪製白子
int tempX = i * 20 + 13;
int tempY = j * 20 + 73;
or();
al(tempX - 7, tempY - 7, 14, 14);
or();
al(tempX - 7, tempY - 7, 14, 14);
}
}
}
age(bi,0,0,this );
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
// n("X:"+());
// n("Y:"+());
if (canPlay == true) {
x = ();
y = ();
if (x >= 13 && x <= 373 && y >= 73 && y <= 433) {
x = (x - 13) / 20;
y = (y - 72) / 20;
if (allChess[x][y] == 0) {
// 判断现在要下什么颜色的棋子
if (isBlack == true) {
allChess[x][y] = 1;
isBlack = false;
message="轮到白方";
} else {
allChess[x][y] = 2;
isBlack = true;
message="轮到黑方";
}
// 判断这个棋子是否和其他棋子连成五个,即游戏结束
boolean Winflag = in();
if (Winflag == true) {
ssageDialog(this, "游戏结束"
+ (allChess[x][y] == 1 ? "黑方" : " 白方") +
"获胜");
canPlay = false;
}
// in();
} else {
ssageDialog(this, " 当前位置已经有子,请重新落
子!");
}
t();
}
}
// n(()+"---"+());
//点击 开始按钮
if(()>=404&&()<=472&&()>=74&&()<=104){
int result=nfirmDialog(this, "是否重新开始游戏?");
if(result==0){
//现在重新开始游戏
//重新开始游戏所需的操作,1.把棋盘清空 allcChess 这个数组中的数全部
归零;
//2 将游戏信息设置为 初始位置;
// 3 将下一步器=棋设置为 黑方开始;
for (int i=0;i<19;i++){
for(int j=0;j<19;j++){
allChess[i][j]=0;
}
}
}
//另一种方式 allChess= new int [19][19];
message="黑色先行";
isBlack=true ;
blackTime=maxTime;
whiteTime=maxTime;
if(maxTime>0){
blackMessage=maxTime/3600+":"
+(maxTime/60-maxTime/3600*60)+":"
+(maxTime-maxTime/60*60);
whiteMessage=maxTime/3600+":"
+(maxTime/60-maxTime/3600*60)+":"
+(maxTime-maxTime/60*60);
();
}else{
blackMessage="无限制";
whiteMessage="无限制";
}
t();
}
// 点击游戏设置
if(()>=404&&()<=472&&()>=124&&()<=154){
String input=putDialog("请输入游戏最大时间,(单位:分
钟),如果输入0,表示时间为无限制!");
try {
maxTime=nt(input)*60;
if(maxTime<0){
ssageDialog(this, "请输入正确信息,不允许
输入负数!");
}
if(maxTime==0){
int result= nfirmDialog(this, "设置完成,是否
重新开始游戏?");
"设置完成,
是否重新开始游戏?");
if(result==0){
for (int i=0;i<19;i++){
for(int j=0;j<19;j++){
allChess[i][j]=0;
}
}
//另一种方式 allChess= new int [19][19];
message="黑色先行";
isBlack=true ;
blackTime=maxTime;
whiteTime=maxTime;
blackMessage="无限制";
whiteMessage="无限制";
t();
}
}
if(maxTime>0){
int result= nfirmDialog(this,
if(result==0){
for (int i=0;i<19;i++){
for(int j=0;j<19;j++){
allChess[i][j]=0;
}
}
//另一种方式 allChess= new int [19][19];
message="黑色先行";
isBlack=true ;
blackTime=maxTime;
whiteTime=maxTime;
blackMessage=maxTime/3600+":"
+(maxTime/60-maxTime/3600*60)+":"
+(maxTime-maxTime/60*60);
whiteMessage=maxTime/3600+":"
+(maxTime/60-maxTime/3600*60)+":"
+(maxTime-maxTime/60*60);
();
输入负数!");
}
if(maxTime==0){
完成,是否
重新开始游戏?");
"设置完成,
是否重新开始游戏?");
int result= nfirmDialog(this, "设置 if(result==0){
for (int i=0;i<19;i++){
for(int j=0;j<19;j++){
allChess[i][j]=0;
}
}
//另一种方式 allChess= new int [19][19];
message="黑色先行";
isBlack=true ;
blackTime=maxTime;
whiteTime=maxTime;
blackMessage="无限制";
whiteMessage="无限制";
t();
}
}
if(maxTime>0){
int result= nfirmDialog(this,
if(result==0){
for (int i=0;i<19;i++){
for(int j=0;j<19;j++){
allChess[i][j]=0;
}
}
//另一种方式 allChess= new int [19][19];
message="黑色先行";
isBlack=true ;
blackTime=maxTime;
whiteTime=maxTime;
blackMessage=maxTime/3600+":"
+(maxTime/60-maxTime/3600*60)+":"
+(maxTime-maxTime/60*60);
whiteMessage=maxTime/3600+":"
+(maxTime/60-maxTime/3600*60)+":"
+(maxTime-maxTime/60*60);
();
int color = allChess[x][y];
/*
y 值
是否相同
* if (color == allChess[x + 1][y]) { count++; if (color == allChess[x +
* 2][y]) { count++; if (color == allChess[x + 3][y]) { count++; } } }
*/
// 通过循环未做棋子相连的判断
// 判断横向是否有5 个棋子相连,特点是 横纵坐标相同,即allChess[x][y] 中/*
* int i = 1; while (color == allChess[x + i][y]) { count++; i++; } i =
* 1; while (color == allChess[x - i][y]) ; { count++; i++; } if (count
* >= 5) { flag = true; }
*/
/*
* //縱方向的 int i2= 1; int count2=1; while (color == allChess[x][y+i2]){
* count2++; i2++; } i2=1; while (color==allChess[x][y-i2]);{ count2++;
* i2++; } if(count2>=5){ flag=true; } //判斷斜右上的左下 int i3= 1; int count3
* =1; while (color == allChess[x+i][y-i]){ count3++; i3++; } i3=1;
* while (color==allChess[x-i][y+i]);{ count3++; i3++; } if(count3>=5){
* flag=true; } //斜下左上右下 int i4= 1; int count4 =1; while (color ==
* allChess[x+i][y+i]){ count4++; i4++; } i4=1; while
* (color==allChess[x-i][y-i]);{ count4++; i4++; } if(count4>=5){
* flag=true; }
*/
// 判斷橫向
count = hess(1, 0, color);
if (count >= 5) {
flag = true;
} else {
// 判斷縱向
count = hess(0, 1, color);
if (count >= 5) {
flag = true;
} else {
// 判斷右上、左下
count = hess(1, -1, color);
if (count >= 5) {
flag = true;
} else {
// 判斷右下、左上
count = hess(1, 1, color);
if (count >= 5) {
flag = true;
}
}
}
}
return flag;
}
private int checkChess(int xChange, int yChange, int color) {
int count = 1;
int tempX = xChange;
int tempY = yChange;
while (x+xChange>=0&&x+xChange<=18&&y+yChange>=0&&y+yChange<=18&&
color == allChess[x + xChange][y + yChange]) {
count++;
if (xChange != 0)
xChange++;
if (yChange != 0){
if(yChange>0)
yChange++;
else{
yChange--;
}
}
}
xChange = tempX;
yChange = tempY;
while (x-xChange>=0&&x- xChange <= 18&&y
- yChange>= 0&&y-
yChange<=18&&
color == allChess[x - xChange][y - yChange]) {
count++;
if (xChange != 0)
xChange++;
if (yChange != 0){
if(yChange>0)
yChange++;
else{
yChange--;
}
}
}
return count;
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void run() {
// TODO Auto-generated method stub
//判断是否有时间限制
if(maxTime>0){
while(true){
if(isBlack){
blackTime--;
if(blackTime==0){
ssageDialog(this, "黑方超時,游戏结束");
}
} else{
whiteTime--;
if(whiteTime==0){
ssageDialog(this, " 白方超时,游戏结束");
}
}
blackMessage=blackTime/3600+":"
+(blackTime/60-blackTime/3600*60)+":"
+(blackTime-blackTime/60*60);
whiteMessage=whiteTime/3600+":"
+(whiteTime/60-whiteTime/3600*60)+":"
+(whiteTime-whiteTime/60*60);
t();
try {
(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
tackTrace();
}
// n(blackTime+"--"+whiteTime);
}
}
}
public static void main(String[] args) {
FiveChessFrame ff= new FiveChessFrame();
}
}
下面是一小段测试代码
package ;
import ;
import ;
import cs;
import t;
import vent;
import istener;
import edImage;
import ;
import ption;
import O;
import ;
public class Mychessframe extends JFrame implements MouseListener{
public Mychessframe(){
JFrame fr=new JFrame();
e(500, 500);
le("五子棋");
izable(false);
aultCloseOperation(_ON_CLOSE);
int width=aultToolkit().getScreenSize().width;
int height=aultToolkit().getScreenSize().height;
// n(width);
// n(height);
ation((width- 500)/2, (height-500)/2 );
seListener(this);
ible(true);
}
public void paint(Graphics g){
/*ring("五子棋游戏",40,40);*/
/*al(30,39,40,40);
al(100,40, 40,40);
*/
// ct(30,40,30,30);
// ct(70, 40,30,30);
// ne(30,80,30,20);
BufferedImage image= null;
try {
image=(new File("F:/") );
} catch (IOException e) {
// TODO Auto-generated catch block
tackTrace();
}
age(image,2,22,this);
ct(30,40,30,30);
ct(70, 40,30,30);
or();
t(new Font("宋体", 40,40));
ring("五子棋游戏",40,100);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
// n(" 鼠标点击");
// ssageDialog(this," 鼠标点击");
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
// n(" 鼠标按下");
// ssageDialog(this," 鼠标按下");
// n(" 鼠标点击位置X"+());
// n(" 鼠标点击位置Y"+());
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
// n(" 鼠标松开");
// ssageDialog(this," 鼠标松开");
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
// n(" 鼠标进入");
// ssageDialog(this," 鼠标进入");
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
// n(" 鼠标离开");
// ssageDialog(this," 鼠标离开");
}
FiveChessFrame ff= new FiveChessFrame();
}
发布者:admin,转转请注明出处:http://www.yc00.com/news/1705915353a1428012.html
评论列表(0条)