Java实践(十一)——五子棋

一、实践目标:

       1.掌握JavaGUI界面设计

       2.掌握鼠标事件的监听(MouseListener,MouseMotionListener)

二、实践内容:

      设计一个简单的五子棋程序,能够实现五子棋下棋过程。如下图所示

 

五子棋运行界面

      1.五子棋棋盘类

package cn.edu.ouc.fiveChess;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RadialGradientPaint;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;

import javax.swing.*;
/**
 * 五子棋--棋盘类 
 */

public class ChessBoard extends JPanel implements MouseListener {
   public static final int MARGIN=30;//边距
   public static final int GRID_SPAN=35;//网格间距
   public static final int ROWS=15;//棋盘行数
   public static final int COLS=15;//棋盘列数
   
   Point[] chessList=new Point[(ROWS+1)*(COLS+1)];//初始每个数组元素为null
   boolean isBlack=true;//默认开始是黑棋先
   boolean gameOver=false;//游戏是否结束
   int chessCount;//当前棋盘棋子的个数
   int xIndex,yIndex;//当前刚下棋子的索引
   
   Image img;
   Image shadows;
   Color colortemp;
   public ChessBoard(){
	  
	  // setBackground(Color.blue);//设置背景色为橘黄色
	   img=Toolkit.getDefaultToolkit().getImage("board.jpg");
	   shadows=Toolkit.getDefaultToolkit().getImage("shadows.jpg");
	   addMouseListener(this);
	   addMouseMotionListener(new MouseMotionListener(){
		   public void mouseDragged(MouseEvent e){
			   
		   }
		   
		   public void mouseMoved(MouseEvent e){
		     int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
		     //将鼠标点击的坐标位置转成网格索引
		     int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
		     //游戏已经结束不能下
		     //落在棋盘外不能下
		     //x,y位置已经有棋子存在,不能下
		     if(x1<0||x1>ROWS||y1<0||y1>COLS||gameOver||findChess(x1,y1))
		    	 setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
		     //设置成默认状态
		     else setCursor(new Cursor(Cursor.HAND_CURSOR));
		     
		   }
	   });
   } 
   
  

//绘制
   public void paintComponent(Graphics g){
	 
	   super.paintComponent(g);//画棋盘
	 
	   int imgWidth= img.getWidth(this);
	   int imgHeight=img.getHeight(this);//获得图片的宽度与高度
	   int FWidth=getWidth();
	   int FHeight=getHeight();//获得窗口的宽度与高度
	   int x=(FWidth-imgWidth)/2;
	   int y=(FHeight-imgHeight)/2;
	   g.drawImage(img, x, y, null);
	
	   
	   for(int i=0
java五子棋 五子棋 java 五子棋代码直接和电脑下对战 Public class FiveChessAI { public int data_a[][] = new int[5][3];// 用于储存进攻值 public int data_d[][] = new int[5][3];// 用于储存防守值 FiveChessAI() { // 进攻值的初始化 data_a[1][1] = 2; data_a[1][2] = 3; data_a[2][1] = 10; data_a[2][2] = 110; data_a[3][1] = 2500; data_a[3][2] = 3000; data_a[4][1] = 99999; data_a[4][2] = 99999; // 防守值的初始化 data_d[1][1] = 1; data_d[1][2] = 2; data_d[2][1] = 1; data_d[2][2] = 100; data_d[3][1] = 100; data_d[3][2] = 500; data_d[4][1] = 20000; data_d[4][2] = 50000; } public FiveChessMap g1 = new FiveChessMap(); public int x, y; void find()// 查找最大值 { int max = 0; for (int i = 0; i < 15; ++i) { for (int j = 0; j < 15; ++j) { if (max < g1.data[i][j]) { max = g1.data[i][j]; } } } for (int i = 0; i < 15; ++i) { for (int j = 0; j < 15; ++j) { if (max == g1.data[i][j]) { x = i; y = j; return; } } } } int getx()// 返回x坐标值 { return x; } int gety()// 返回y坐标值 { return y; } boolean judge_result(int x, int y, int who, FiveChessMap gm)// 判断胜负 { int m, n, i, lianzi = 0; for (m = -1; m <= 1; m++) for (n = -1; n <= 1; n++) { if (m != 0 || n != 0) { for (i = 1; i <= 4; i++) { if (x + i * m >= 0 && x + i * m < 15 && y + i * n >= 0 && y + i * n < 15 && gm.data[x + i * m][y + i * n] == who) { lianzi++; } else { break; } } for (i = -1; i >= -4; i--) { if (x + i * m >= 0 && x + i * m < 15 && y + i * n >= 0 && y + i * n < 15 && gm.data[x + i * m][y + i * n] == who) { lianzi++; } else { break; } } if (lianzi >= 4) { return true; } else { lianzi = 0; } } } return false; }
评论 108
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值