ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Java+MySQL 期末项目 五子棋 登录版

2019-07-13 19:40:21  阅读:215  来源: 互联网

标签:java String MySQL 五子棋 new return import Java public


项目结构如上图,下面附上关键代码

Login.java

package view;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import model.SQL;
import model.User;

public class Login extends JFrame implements ActionListener{
	JLabel jLabel=new JLabel("密码");
	JLabel jLabel2=new JLabel("账户");
	JTextField field=new JTextField(10);
	JPasswordField field2=new JPasswordField(10);
	JButton button=new JButton("登录");
	JButton button2=new JButton("注册");
	User user=new User();
	
	public Login() {
		init();
	}

	private void init() {
		// TODO Auto-generated method stub
		setTitle("五子棋");
		setSize(400, 400);
		JPanel jPanel=new JPanel();
		jPanel.add(jLabel2);
		jPanel.add(field);
		JPanel jPanel2=new JPanel();
		jPanel2.add(jLabel);
		jPanel2.add(field2);
		JPanel jPanel3=new JPanel();
		jPanel3.add(jPanel);
		jPanel3.add(jPanel2);
		JPanel jPanel4=new JPanel();
		jPanel4.add(button);
		button.addActionListener(this);
		button2.addActionListener(this);
		jPanel4.add(button2);
		button.setActionCommand("登录");
		button2.setActionCommand("注册");
		jPanel3.add(jPanel4);
		jPanel3.setLayout(new FlowLayout(FlowLayout.LEFT,140,60));
		add(jPanel3,BorderLayout.CENTER);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);
		setVisible(true);
	}
	
	
	
	public static void main(String[] args) {
		SQL.havaUser("小红");
		new Login();
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		switch (e.getActionCommand()) {
		case "登录":
		{
			if(SQL.havaUser(field.getText())) {//用户存在
				if(SQL.havePassword(field.getText(),String.valueOf(field2.getPassword())) ){
					user.setName(field.getText());
					user.setPassword(String.valueOf(field2.getPassword()));
					JOptionPane.showMessageDialog(this, "欢迎你登录成功");
					setVisible(false);
					new Game();
				}else {
					JOptionPane.showMessageDialog(this, "用户密码不正确");
				}
				
			}else {//用户不存在
				JOptionPane.showMessageDialog(this, "用户不存在");
			}
		}
			break;
		case "注册":
		{
			if(!SQL.havaUser(field.getText())) {//用户不存在的时候在操作
					user.setName(field.getText());
					user.setPassword(String.valueOf(field2.getPassword()));
					if(SQL.insertUser(user.getName(), user.getPassword()))System.out.println("数据保存成功");
					JOptionPane.showMessageDialog(this, "欢迎你注册成功");
					setVisible(false);
					new Game();
			}else {//用户不存在
				JOptionPane.showMessageDialog(this, "用户已经存在");
			}
		}
			break;

		default:
			break;
		}
	}
}

Game.java

package view;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import model.GetImg;
import model.SQL;

public class Game extends JFrame implements MouseListener,ActionListener{
	JPanel cavans=new JPanel();
	JButton button=new JButton("退出游戏");
	JButton button2=new JButton("重新开始");
	boolean iswhite=true;//代表当前下棋的玩家是不是玩家一
	public Game() {//构造方法
		// TODO Auto-generated constructor stub
		init();
	}
	
	//定义一个数组来存储棋盘上棋子的位置和状态
	private int[][] map=new int[30][30];//默认都是0
	//规则如下 1代表白棋	2代表黑棋	白棋先行
	
	private void init() {
		// TODO Auto-generated method stub
		setTitle("五子棋");
		setSize(400-4, 400-4);
		add(cavans,BorderLayout.CENTER);
		JPanel jPanel=new JPanel();
		add(jPanel,BorderLayout.SOUTH);
		jPanel.add(button);
		jPanel.add(button2);
		cavans.addMouseListener(this);
		button.addActionListener(this);
		button2.addActionListener(this);
		button.setActionCommand("退出");
		button2.setActionCommand("刷新");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);
		setVisible(true);
	}

	@Override
	public void paint(Graphics g) {
		// TODO Auto-generated method stub
		super.paint(g);
		g=cavans.getGraphics();
		System.out.println(cavans.getWidth());
		System.out.println(cavans.getHeight());
		for(int i=0;i<=380;i+=20) {//画竖线
			g.drawLine(i, 0, i, 335);
		}
		for(int i=0;i<=320;i+=20) {//画横线
			g.drawLine(0, i, 386, i);
		}
//		g.drawImage(GetImg.getImage("img/1.png"), 0, 0, 20, 20, null);
	}
	
	public void drawChess(Graphics g) {//绘制棋子
		//遍历数组
		for(int i=0;i<25;i++) {
			for(int j=0;j<25;j++) {
				if(map[i][j]==1) {
					g.drawImage(GetImg.getImage("img/1.png"), i*20-10, j*20-10, 20, 20, null);
				}else if(map[i][j]==2) {
					g.drawImage(GetImg.getImage("img/2.png"), i*20-10, j*20-10, 20, 20, null);
				}
			}
		}
	}
	
	public boolean isWon(int x, int y, int chess) {//判断胜利
        int count = 1;      //本身一点为 1
        int posX = 0;    
        int posY = 0;
        /**判断水平方向上的胜负
        /* 将水平方向以传入的点x上的y轴作为分隔线分为两部分
         * 先向左边遍历,判断到的相同的连续的点  count++
         */
        for(posX = x - 1; posX > 0 ; posX--) {
            if (map[posX][y] == chess) {
                count++;
                if (count >= 5) {
                    return true;
                }
            }else {
                break;
            }
        }    //向右边遍历
        for(posX = x + 1; posX <= 15; posX++) {
            if (map[posX][y] == chess) {
                count++;
                if (count >= 5) {
                    return true;
                }
            }else {
                break;
            }
        }
        /**判断垂直方向上的胜负
        /* 将垂直方向以传入的点y上的x轴作为分隔线分为两部分
         * 先向上遍历,判断到的相同的连续的点  count++
         */
        for(posY = y - 1; posY > 0; posY--) {
            if (map[x][posY] == chess) {
                count++;
                if (count >= 5) {
                    return true;
                }
            }else {
                break;
            }
        }//向下遍历
        for(posY = y + 1; posY <= 15; posY++) {
            if (map[x][posY] == chess) {
                count++;
                if (count >= 5) {
                    return true;
                }
            }else {
                break;
            }
        }
        /**判断左上右下方向上的胜负
         * 以坐标点为分割线,将棋盘分为左右两个等腰三角形 
         * 先判断左边的
         */
        for(posX = x - 1, posY = y - 1; posX > 0 && posY > 0; posX--, posY--) {
            if (map[posX][posY] == chess) {
                count++;
                if (count >= 5) {
                    count = 1;
                    return true;
                }
            }else {
                break;
            }
        }//判断右边的
        for(posX = x + 1, posY = y + 1; posX <= 15 && posY <= 15; posX++, posY++) {
            if (map[posX][posY] == chess) {
                count++;
                if (count >= 5) {
                    count = 1;
                    return true;
                }
            }else {
                break;
            }
        }
        /**判断右下左下方向上的胜负
         * 以坐标点为分割线,将棋盘分为左右两个等腰三角形 
         * 先判断左边的
         */
        for(posX = x + 1, posY = y - 1; posX <= 15 && posY > 0; posX++, posY--) {
            if (map[posX][posY] == chess) {
                count++;
                if (count >= 5) {
                    return true;
                }
            }else {
                break;
            }
        }//判断右边的
        for(posX = x - 1, posY = y + 1; posX > 0 && posY <= 15; posX--, posY++) {
            if (map[posX][posY] == chess) {
                count++;
                if (count >= 5) {
                    return true;
                }
            }else {
                break;
            }
        }
        return false;
    }
	
	
	@Override
	public void mouseClicked(MouseEvent e) {//鼠标点击
		// TODO Auto-generated method stub
		System.out.println("鼠标点击");
		int x=e.getX();
		int y=e.getY();
		float mapx=x/10;
		float mapy=y/10;
		for(float i=0;i<=20;i++) {
			if(i-0.5<=mapx/2&&mapx/2<(i+0.5)) {
				mapx=i;
			}
			if(i-0.5<=mapy/2&&mapy/2<(i+0.5)) {
				mapy=i;
			}
		}
		//改变数组中相应位置的值
		if(map[(int)mapx][(int)mapy]==0) {
			if(iswhite) {
				map[(int)mapx][(int)mapy]=1;
				iswhite=false;
			}else {
				map[(int)mapx][(int)mapy]=2;
				iswhite=true;
			}
		}
		System.out.println(mapx+","+mapy);
		drawChess(cavans.getGraphics());
		if(isWon((int)mapx,(int)mapy,1)) {
			JOptionPane.showMessageDialog(this, "白棋胜利");
		}
		if(isWon((int)mapx,(int)mapy,2)) {
			JOptionPane.showMessageDialog(this, "黑棋胜利");
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {//鼠标按下
		// TODO Auto-generated method stub
//		System.out.println("鼠标按下");
	}

	@Override
	public void mouseReleased(MouseEvent e) {//鼠标释放
		// TODO Auto-generated method stub
//		System.out.println("鼠标释放");
	}

	@Override
	public void mouseEntered(MouseEvent e) {//鼠标进入
		// TODO Auto-generated method stub
//		System.out.println("鼠标进入");
	}

	@Override
	public void mouseExited(MouseEvent e) {//鼠标移出
		// TODO Auto-generated method stub
//		System.out.println("鼠标移出");
	}
	

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		switch (e.getActionCommand()) {
		case "刷新":
		{
			this.setVisible(false);
			new Game();
		}
			break;
		case "退出":
		{
			System.exit(EXIT_ON_CLOSE);
		}
			break;

		default:
			break;
		}
	}
}

User.java

package model;

public class User {
	private String name;
	private String password;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

SQL.java

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.MessageFormat;



public class SQL {
	static Connection con; // 声明Connection对象
	static Statement sql; // 声明Statement对象
	static ResultSet res; // 声明ResultSet对象
	
	private static String driver="com.mysql.jdbc.Driver";
	private static String conect="jdbc:mysql://127.0.0.1:3306/user?characterEncoding=GBK";
	
	public static boolean havaUser(String name) {
		try {
			Class.forName(driver);//加载驱动器
			con = DriverManager.getConnection(conect,"root","123456");//链接数据库
			sql = con.createStatement(); // 实例化Statement对象
			// 执行SQL语句,返回结果集
			res = sql.executeQuery("select * from user");
			while (res.next()) {
				if(String.valueOf(res.getString("name")).equals(name)) {
					System.out.println(res.getString("name"));
					return true;//用户存在返回true
				}
			}
			return false;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	public static boolean havePassword(String name,String password) {
		try {
			Class.forName(driver);//加载驱动器
			con = DriverManager.getConnection(conect,"root","123456");//链接数据库
			sql = con.createStatement(); // 实例化Statement对象
			// 执行SQL语句,返回结果集
			res = sql.executeQuery("select * from user");
			while (res.next()) {
				if(String.valueOf(res.getString("name")).equals(name)&&String.valueOf(res.getString("password")).equals(password)) {
					return true;//用户密码正确返回true
				}
			}
			return false;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	public static boolean insertUser(String name,String password) {
		try {
			Class.forName(driver);//加载驱动器
			con = DriverManager.getConnection(conect,"root","123456");//链接数据库
			sql = con.createStatement(); // 实例化Statement对象
			// 执行SQL语句,返回结果集
			String sql = MessageFormat.format("insert into user values(''{0}'',''{1}'')", name, password);
			System.out.println(sql);
			Statement state = con.createStatement(); // 容器
			state.executeUpdate(sql); // 将sql语句上传至数据库执行
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
}

GetImg.java

package model;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

/**
 * 用于输入图片路径返回图像文件的工具类
 * @author 
 *
 */

//获取图片工具类
public class GetImg {
	private GetImg() {
		//私有构造方法,不能被实例
	}
    public static Image getImage(String path) {
        URL u = GetImg.class.getClassLoader().getResource(path);
        BufferedImage img = null;
        try {
            img = ImageIO.read(u);
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        return img;
    }
}

运行效果图如下:

对于数据库得设计不同的朋友有不同的设置,更改相应的设置即可

标签:java,String,MySQL,五子棋,new,return,import,Java,public
来源: https://blog.csdn.net/xiao_dou_ya_cool/article/details/95779717

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有