最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)簡單五子棋小游戲(1)

 更新時間:2022年01月10日 13:30:37   作者:暖男小王子  
這篇文章主要為大家詳細介紹了java實現(xiàn)簡單五子棋小游戲的第一部分,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)簡單五子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下

講解

五子棋,實際上就是用一個數(shù)組來實現(xiàn)的。沒有其他很復雜的結構。
首先我們制作五子棋,先要有一個棋盤。

public void setGraphics(Graphics g){
?? ??? ?this.g=g;
?? ??? ?for(int i=0;i<11;i++){
?? ??? ??? ?g.drawLine(100+Size*i, 100, 100+Size*i, 500);
?? ??? ??? ?g.drawLine(100, 100+Size*i, 500, 100+Size*i);
?? ??? ?}
?? ??? ?for(int i=0;i<11;i++){
?? ??? ??? ?for(int j=0;j<11;j++){
?? ??? ??? ??? ?chessboard[i][j]=0;
?? ??? ??? ?}
?? ??? ?}
?? ?}

此時我們在畫布上制作了一個棋盤,圖示如下:

接下來我們要實現(xiàn)的就是如何去放置棋子了。
放置棋子大體思路就是,當我們點擊一個網(wǎng)格點的時候,可以出現(xiàn)一個白棋或者黑棋,所以我們在這里需要學會如何畫一個橢圓。

// 繪制一個橢圓
? g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上角的坐標,使畫好的圓恰好在以網(wǎng)格點所在的位置上
// 填充一個橢圓
?g.setColor(Color.BLACK);
?g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);

此時,點擊某一個位置就會出現(xiàn)一個黑棋子。這里我們需要注意的是,我們不可能要求用戶每一次的點擊都非常準確,所以我們必須設定一個范圍,只要這個范圍內(nèi)的點擊,我們都默認點擊到了這個網(wǎng)格上面。因為網(wǎng)格大小為40,所以我們以一個網(wǎng)格點位中心,向上下左右移動20長度的范圍都屬于這個點。
白棋的設置也一樣

if(number==0){
? ? ? ? ?? ??? ??? ?// 繪制一個橢圓
? ? ? ? ? ? ? ? ?? ?g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上角的坐標,使畫好的圓恰好在以網(wǎng)格點所在的位置上
? ? ? ? ? ? ? ? ?? ?// 填充一個橢圓
? ? ? ? ? ? ? ? ?? ?g.setColor(Color.BLACK);
? ? ? ? ? ? ? ? ?? ?g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);
? ? ? ? ? ? ? ? ?? ?number++;
? ? ? ? ?? ??? ?}
? ? ? ? ?? ??? ?else{
? ? ? ? ?? ??? ??? ?g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);
? ? ? ? ? ? ? ? ?? ?// 填充一個橢圓
? ? ? ? ? ? ? ? ?? ?g.setColor(Color.WHITE);
? ? ? ? ? ? ? ? ?? ?g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);
? ? ? ? ? ? ? ? ?? ?number--;
? ? ? ? ?? ??? ?}

現(xiàn)在我們看一下我們的棋盤,白棋和黑棋都可以放到棋盤上面了,但是依舊存在一個問題,當我們在同一位置點擊兩次后會發(fā)生覆蓋現(xiàn)象。如何解決?
我們只需要設置一個數(shù)組來記錄這個位置是否放置了棋子就好了

完整代碼

package game;

import java.awt.Graphics;

import javax.swing.JFrame;


public class ShowUI {
?? ?public void Draw(){
?? ??? ?//設置格子的大小
?? ??? ?
?? ??? ?JFrame drawframe=new JFrame();//創(chuàng)建一個窗體
?? ??? ?drawframe.setSize(1000,600);//設置窗體大小
?? ??? ?drawframe.setLocationRelativeTo(null);//設置相對位置
?? ??? ?drawframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉窗體操作
?? ??? ?//創(chuàng)建監(jiān)聽器對象
?? ??? ?DrawListener draw = new DrawListener();
?? ??? ?drawframe.addMouseListener(draw);
?? ??? ?drawframe.setVisible(true);//設置窗體可見
?? ??? ?try {
?? ??? ??? ?Thread.sleep(566);
?? ??? ?} catch (InterruptedException e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?Graphics g = drawframe.getGraphics();
?? ??? ?//設置畫布
?? ??? ?draw.setGraphics(g);
?? ??? ?
?? ?}

?? ?public static void main(String[] args) {
?? ??? ?// TODO Auto-generated method stub

?? ??? ?ShowUI a=new ShowUI();
?? ??? ?a.Draw();//引用對象
?? ?}

}
package game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListener implements MouseListener{

?? ?Graphics g;
?? ?public int Start_X=50;
?? ?public int Start_Y=50;
?? ?public int Size=40;
?? ?public int number=0;
?? ?public int [][]chessboard=new int[11][11];
?? ?
?? ?public void setGraphics(Graphics g){
?? ??? ?this.g=g;
?? ??? ?for(int i=0;i<11;i++){
?? ??? ??? ?g.drawLine(100+Size*i, 100, 100+Size*i, 500);
?? ??? ??? ?g.drawLine(100, 100+Size*i, 500, 100+Size*i);
?? ??? ?}
?? ??? ?for(int i=0;i<11;i++){
?? ??? ??? ?for(int j=0;j<11;j++){
?? ??? ??? ??? ?chessboard[i][j]=0;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?/*public void drawOval(Graphics g) {
? ? ? ??
? ? ? ?// Graphics2D g2d = (Graphics2D) g.create();

? ? ? ? //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
? ? ? ? //g.setColor(Color.RED);

? ? ? ? // 1. 繪制一個圓: 圓的外切矩形 左上角坐標為(0, 0), 寬高為100
? ? ? ? g.drawOval(0, 0, 100, 100);

? ? ? ? g.setColor(Color.GRAY);

? ? ? ? // 2. 填充一個橢圓
? ? ? ? g.fillOval(120, 100, 100, 150);

? ? ? ? g.dispose();
? ? }*/
?? ?/**
? ? ?* Invoked when the mouse button has been clicked (pressed
? ? ?* and released) on a component.
? ? ?*/
? ? public void mouseClicked(MouseEvent e){
? ? ?? ?int countx=e.getX();
? ? ?? ?int county=e.getY();
? ? ?? ?int Size=40;
? ? ?? ?//起始點為(100,100)
? ? ?? ?//終止點為(500,500)
? ? ?? ?//System.out.println(countx);
? ? ?? ?//System.out.println(county);
? ? ?? ?int a=0;
? ? ?? ?int b=0;//這里是修改點擊顯示的位置,讓最后得到的點在角落上
? ? ?? ?for(int i=0;i<11;i++){
?? ??? ??? ?if(countx>=(100+Size*i-(Size/2))&&countx<(100+Size*i+(Size/2))){
?? ??? ??? ??? ?a=100+Size*i;
?? ??? ??? ??? ?//System.out.println(a);
?? ??? ??? ?}
?? ??? ??? ?if(county>=(100+Size*i-(Size/2))&&county<(100+Size*i+(Size/2))){
?? ??? ??? ??? ?b=100+Size*i;
?? ??? ??? ??? ?//System.out.println(b);
?? ??? ??? ?}
?? ??? ?}
? ? ?? ?if(a!=0&&b!=0){
? ? ?? ??? ?int flag1=0;
? ? ?? ??? ?int flag2=0;
? ? ?? ??? ?flag1=(a-100)/Size;
? ? ?? ??? ?flag2=(b-100)/Size;
? ? ?? ??? ?if(chessboard[flag1][flag2]==0){//判斷這個地方是否已經(jīng)放置了一個點
? ? ?? ??? ??? ?if(number==0){
? ? ? ? ?? ??? ??? ?// 繪制一個橢圓
? ? ? ? ? ? ? ? ?? ?g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上角的坐標,使畫好的圓恰好在以網(wǎng)格點所在的位置上
? ? ? ? ? ? ? ? ?? ?// 填充一個橢圓
? ? ? ? ? ? ? ? ?? ?g.setColor(Color.BLACK);
? ? ? ? ? ? ? ? ?? ?g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);
? ? ? ? ? ? ? ? ?? ?number++;
? ? ? ? ?? ??? ?}
? ? ? ? ?? ??? ?else{
? ? ? ? ?? ??? ??? ?g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);
? ? ? ? ? ? ? ? ?? ?// 填充一個橢圓
? ? ? ? ? ? ? ? ?? ?g.setColor(Color.WHITE);
? ? ? ? ? ? ? ? ?? ?g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);
? ? ? ? ? ? ? ? ?? ?number--;
? ? ? ? ?? ??? ?}
? ? ?? ??? ??? ?chessboard[flag1][flag2]=1;//沒放置,那么我們需要在放置后
? ? ?? ??? ?}
? ? ?? ??? ?else{
? ? ?? ??? ??? ?System.out.println("此處已經(jīng)放置了棋子");
? ? ?? ??? ?}
? ? ?? ??? ?
? ? ?? ?}
? ? ?? ?
? ? }

? ? /**
? ? ?* Invoked when a mouse button has been pressed on a component.
? ? ?*///點擊鼠標
? ? public void mousePressed(MouseEvent e){
? ? ?? ?
? ? }

? ? /**
? ? ?* Invoked when a mouse button has been released on a component.
? ? ?*///釋放鼠標
? ? public void mouseReleased(MouseEvent e){
? ? ?? ?
? ? }

? ? /**
? ? ?* Invoked when the mouse enters a component.
? ? ?*/
? ? public void mouseEntered(MouseEvent e){
? ? ?? ?
? ? }

? ? /**
? ? ?* Invoked when the mouse exits a component.
? ? ?*/
? ? public void mouseExited(MouseEvent e){
? ? ?? ?
? ? }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java應用CPU使用率過高排查方式

    Java應用CPU使用率過高排查方式

    這篇文章主要介紹了Java應用CPU使用率過高排查方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 淺談Java自定義注解和運行時靠反射獲取注解

    淺談Java自定義注解和運行時靠反射獲取注解

    下面小編就為大家?guī)硪黄獪\談Java自定義注解和運行時靠反射獲取注解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 使用Java后臺實現(xiàn)彈出框頁面的代碼案例

    使用Java后臺實現(xiàn)彈出框頁面的代碼案例

    在現(xiàn)代Web應用中,彈出框(Modal)是一個常見且重要的UI組件,通過彈出框,我們可以實現(xiàn)用戶交互、表單提交、信息提示等功能,本篇博客將詳細介紹如何使用Java后臺實現(xiàn)彈出框頁面,并展示具體的代碼案例和運行效果,需要的朋友可以參考下
    2024-08-08
  • MybatisPlus插件自動維護更新和創(chuàng)建時間方式

    MybatisPlus插件自動維護更新和創(chuàng)建時間方式

    這篇文章主要介紹了MybatisPlus插件自動維護更新和創(chuàng)建時間方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • spring中AOP 注解開發(fā)示例詳解

    spring中AOP 注解開發(fā)示例詳解

    這篇文章主要介紹了spring中AOP注解開發(fā)的相關資料,文中介紹的很詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • SpringBoot詳解執(zhí)行過程

    SpringBoot詳解執(zhí)行過程

    這篇文章主要介紹了SpringBoot的執(zhí)行過程原理,Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-07-07
  • Java實現(xiàn)的矩陣乘法示例

    Java實現(xiàn)的矩陣乘法示例

    這篇文章主要介紹了Java實現(xiàn)的矩陣乘法,簡單描述了矩陣乘法的原理,并結合實例形式分析了java實現(xiàn)矩陣乘法的相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • java使用itext如何直接生成pdf

    java使用itext如何直接生成pdf

    在工作中,制作PDF文件是常見需求,尤其是需要插入動態(tài)數(shù)據(jù)或圖像時,使用PDF模板填充表單域通常足夠,但對于復雜文件,可以通過拼接PDF內(nèi)容來靈活排版,iText庫提供了豐富的PDF操作功能,如設置頁面大小、邊距、字體、生成動態(tài)表格、添加水印、設置密碼等
    2024-09-09
  • Springboot動態(tài)切換數(shù)據(jù)源的具體實現(xiàn)與原理分析

    Springboot動態(tài)切換數(shù)據(jù)源的具體實現(xiàn)與原理分析

    目前有個需求,需要使用不同的數(shù)據(jù)源,例如某業(yè)務要用A數(shù)據(jù)源,另一個業(yè)務要用B數(shù)據(jù)源,所以下面這篇文章主要給大家介紹了關于Springboot動態(tài)切換數(shù)據(jù)源的具體實現(xiàn)與原理分析,需要的朋友可以參考下
    2021-12-12
  • 簡單幾步實現(xiàn)將Spring security4.x升級到5.x

    簡單幾步實現(xiàn)將Spring security4.x升級到5.x

    這篇文章主要介紹了簡單幾步實現(xiàn)將Spring security4.x升級到5.x方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

贡山| 诏安县| 乌拉特后旗| 枞阳县| 木兰县| 霞浦县| 广平县| 榆中县| 西城区| 平顺县| 平山县| 余江县| 门头沟区| 墨江| 八宿县| 松阳县| 凌源市| 四川省| 巴林右旗| 望都县| 百色市| 四平市| 巴里| 孝义市| 昌宁县| 原阳县| 乐东| 浮梁县| 田阳县| 华池县| 招远市| 年辖:市辖区| 东城区| 达拉特旗| 邓州市| 腾冲县| 眉山市| 崇文区| 巍山| 阿勒泰市| 沂南县|