Java程序设计2023-第四次上机练习

8-1三子棋

编写程序,实现简单的三子棋游戏。在三子棋中,双方在3×3的棋盘中轮流下棋,一方用*示,另一方用O表示。如果一方的3个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满,但没有一方获胜则出现平局。在程序中,一方为用户,用户在界面上输入每次下棋的位置;另一方下棋的位置为随机自动生成。
在这里插入图片描述
在这里插入图片描述

参考代码 有所修改

import java.util.Random;
import javax.swing.*;
class CheckerBoard{static final Integer BOUNDARY = 3;char[][] board;int count;int[] route;boolean firstPlayer;public CheckerBoard() {count = 0;int num = 1;route = new int[10];board = new char[5][5];for(int i = 1; i <= BOUNDARY; i++){for(int j = 1; j <= BOUNDARY; j++){board[i][j] = (char) ('0' + num++);}}}public void update(int local, char c) {int i = (local + 3 - 1) / 3;int j = (local - 1) % 3 + 1;board[i][j] = c;count++;route[count] = local;}public boolean goBack(){if(count <= 1){return false;}count-=2;for(int k = 1; k <= 2; k++){int local = route[count + k];int i = (local + 3 - 1) / 3;int j = (local - 1) % 3 + 1;board[i][j] = (char) (local + '0');}return true;}public boolean check(int local) {int i = (local + 3 - 1) / 3;int j = (local - 1) % 3 + 1;return board[i][j] == '*' || board[i][j] == 'o';}public String output() {StringBuilder str = new StringBuilder("-----------------------\n");for(int i = 1; i <= BOUNDARY; i++) {str.append(" |   ").append(board[i][1]).append("   |   ").append(board[i][2]).append("   |   ").append(board[i][3]).append("   |\n");str.append("------------------------\n");       }return str.toString();}public boolean isExceed(int local) {return local < 1 || local > 9 ;}public boolean isWin() {//判断行列for(int i = 1; i <= BOUNDARY; i++) {if(board[i][1] == board[i][3] && board[i][2] == board[i][1])return true;if(board[1][i] == board[3][i] && board[2][i] == board[1][i])return true;}//判断对角线if(board[1][1] == board[3][3] && board[1][1] == board[2][2])return true;return board[1][3] == board[3][1] && board[1][3] == board[2][2];}
}
public class TicTacToe {static CheckerBoard b = new CheckerBoard();public static void robotPut () {Random rand = new Random();int local = rand.nextInt(9) + 1;while(b.check(local)) {local = rand.nextInt(9) + 1;}b.update(local, 'o');}public static void userPut() {UIManager.put("OptionPane.cancelButtonText", "撤销");String s = JOptionPane.showInputDialog(b.output() + "请输入位置:");while("".equals(s) || s == null || b.isExceed(Integer.parseInt(s)) || b.check(Integer.parseInt(s))) {if(s == null){if(b.goBack()){JOptionPane.showMessageDialog(null, "撤销成功!");}else{JOptionPane.showMessageDialog(null, "撤销失败!","提示",JOptionPane.ERROR_MESSAGE);}userPut();return;}JOptionPane.showMessageDialog(null, "输入有误, 请重新输入!","提示",JOptionPane.ERROR_MESSAGE);s = JOptionPane.showInputDialog(b.output() + "请输入位置:");}b.update(Integer.parseInt(s), '*');}public static void main(String[] args) {int f=JOptionPane.showConfirmDialog(null,"你是否要先下?","选择",JOptionPane.YES_NO_CANCEL_OPTION);boolean curPlayer=true;if(f==0) {curPlayer=true;JOptionPane.showMessageDialog(null,"你先下!");}else if(f==1){curPlayer=false;JOptionPane.showMessageDialog(null,"机器人先下!");}else System.exit(0);if(curPlayer) {userPut();} else {robotPut();}curPlayer = !curPlayer;while(!b.isWin()) {if(b.count == 9) {//判断是否平局JOptionPane.showMessageDialog(null,b.output() + "平局!");System.exit(0);}if(curPlayer) {userPut();} else {robotPut();}curPlayer = !curPlayer;}String str = curPlayer ? "机器人" : "你";if(str.equals("机器人"))JOptionPane.showMessageDialog(null, b.output()+"很遗憾,你输了!");JOptionPane.showMessageDialog(null, b.output() + "恭喜你赢了!");System.exit(0);}
}

8-3绘制随机图形

定义4个类,MyShape、MyLine、MyRectangle和MyOval,其中MyShape是其他三个类的父类。MyShape为抽象类,包括图形位置的四个坐标;一个无参的构造方法,将所有的坐标设置为0;一个带参的构造函数,将所有的坐标设置为相应值;每个坐标的设置和读取方法;abstract void draw(Graphics g)方法。MyLine类负责画直线,实现父类的draw方法;MyRectangle负责画矩形,实现父类的draw方法;MyOval负责画椭圆,实现父类的draw方法。编写一个应用程序,使用上面定义的类,随机选取位置和形状,绘制20个图形。
在这里插入图片描述

参考代码

package ticTacToe.pack;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;
import javax.swing.JFrame;abstract class MyShape{double a;double b;double c;double d;public MyShape(){a=0;b=0;c=0;d=0;}public MyShape(double a,double b,double c,double d) {this.a=a;this.b=b;this.c=c;this.d=d;}public double getA() {return a;}public void setA(int a) {this.a = a;}public double getB() {return b;}public void setB(int b) {this.b = b;}public double getC() {return c;}public void setC(int c) {this.C = c;}public double getD() {return d;}public void setD(int d) {this.d = d;}abstract void draw(Graphics g);
}
class MyLine extends MyShape{public MyLine(double a,double b,double c,double d) {super(a,b,c,d);}void draw(Graphics g) {Graphics2D g2=(Graphics2D )g;Line2D line=new Line2D.Double(this.a,this.b,this.c,this.d);g2.draw(line);}
}
class MyRectangle extends MyShape{public MyRectangle(double a,double b,double c,double d) {super(a,b,c,d);}void draw(Graphics g) {Graphics2D g2=(Graphics2D )g;Rectangle2D rectangle=new Rectangle2D.Double(this.a,this.b,this.c,this.d);g2.draw(rectangle);}
}
class MyOval extends MyShape{public MyOval(double a,double b,double c,double d) {super(a,b,c,d);}void draw(Graphics g) {Graphics2D g2=(Graphics2D )g;Ellipse2D ellipse=new Ellipse2D.Double(this.a,this.b,this.c,this.d);g2.draw(ellipse);}
}public class Paint{public static void main(String []args) {EventQueue.invokeLater(new Runnable(){public void run(){JFrame Frame = new JFrame();Frame.add(new DrawComponent());Frame.pack();Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Frame.setVisible(true);}});}
}
class DrawComponent extends JComponent
{private static final int DEFAULT_WIDTH=500;private static final int DEFAULT_HEIGHT=500;public void paintComponent(Graphics g){for(int i=0;i<20;i++) {double a = Math.random()*300;double b = Math.random()*300;double c = Math.random()*300;double d = Math.random()*300;if(i<6) {MyOval aMyOval = new MyOval(a, b, c, d);aMyOval.draw(g);}else if(i<12) {MyRectangle aMyRectangle = new MyRectangle(a, b, c, d);aMyRectangle.draw(g);}else {MyLine aLine = new MyLine(a, b, c, d);aLine.draw(g);}}}public Dimension getPreferredSize(){return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);}
}

8-4猜数游戏

编写一个猜数程序,该程序随机在1到1000的范围中选择一个供用户猜测的整数。界面上提供一个文本框来接收用户输入的猜测的数,如果用户猜得太大,则背景变为红色,如果猜得太小,背景变为蓝色。用户猜对后,文本框变为不可编辑,同时提示用户猜对了。界面上提供一个按钮,使用户可以重新开始这个游戏。在界面上还需显示用户猜测的次数。
实验步骤:
(1) 定义继承自JFrame的类,在该类中添加界面各部分;
(2) 定义事件监听器类完成事件处理;
(3) 定义一个包含main方法的测试类,在该类中创建框架类对象,并显示。
实验提示:
(1) 使用面板进行页面布局;
(2) 可以使用内部类定义事件监听器类;
(3) 按钮点击通过处理ActionEvent事件来完成响应。
在这里插入图片描述

参考代码

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
class Gs extends JPanel implements ActionListener{private int cnt;private int truenb;private JPanel all;private JLabel lb1,lb2,lb3,lb4,lb5;private JButton bnt1,bnt2,bnt3;private JTextField inp;private JFrame jf;public void generate(){//生成随机数作为答案Random r=new Random();truenb=r.nextInt(1000)+1;}public Gs(){cnt=0;generate();//生成所有物件的容器all=new JPanel();all.setLayout(null);  all.setBounds(100,80,350,200);// JLabel提示信息lb1= new JLabel("你已经猜了"+cnt+"次"); //已经猜了x次lb1.setBounds(0, 5, 150, 20);lb1.setFont(new Font("宋体",Font.BOLD,14));// lb1.setVisible(true);all.add(lb1);lb2=new JLabel(); //输入猜测的数lb2.setText("输入猜测的数");lb2.setFont(new Font("宋体",Font.BOLD,14));lb2.setBounds(10, 40, 110, 20);all.add(lb2);     inp=new JTextField(); //输入框inp.setBounds(110, 40, 120, 20);inp.setBackground(Color.WHITE);all.add(inp);lb3=new JLabel(); //太大or太小lb3.setFont(new Font("宋体",Font.BOLD,14));lb3.setBounds(240, 40, 120, 20);lb3.setVisible(false);all.add(lb3);lb4=new JLabel("恭喜你猜对了");lb4.setFont(new Font("宋体",Font.BOLD,14));lb4.setBounds(10, 125, 120, 20);lb4.setVisible(false);all.add(lb4);lb5=new JLabel("猜测范围在1—~1000之间");lb5.setFont(new Font("宋体",Font.BOLD,14));lb5.setBounds(10,60,180,20);all.add(lb5);bnt1=new JButton("确定");bnt1.setBounds(10, 90, 90, 30);all.add(bnt1);bnt2=new JButton("重新开始");bnt2.setBounds(120, 90, 90, 30);all.add(bnt2);bnt3=new JButton("退出");bnt3.setBounds(230, 90, 90, 30);all.add(bnt3);//给按钮添加事件监听bnt1.addActionListener(this);    //传this指针方便判断bnt2.addActionListener(this);bnt3.addActionListener(this);//将Jpanel加入Jframejf=new JFrame();jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setTitle("猜数游戏");// jf.setLayout(null);jf.setBounds(250,200,350,200);jf.add(all);jf.setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getSource()==bnt1){   //确定按钮cnt++;lb1.setText("您已经猜了"+cnt+"次");int gus=Integer.valueOf(inp.getText());if(gus<truenb){   //太小lb3.setVisible(true);lb3.setText("太小");all.setBackground(Color.BLUE);}else if(gus>truenb){    //太大lb3.setVisible(true);lb3.setText("太大!");all.setBackground(Color.RED);}else{    //猜对了lb4.setVisible(true);inp.setEditable(false);    //禁止用户编辑bnt1.setEnabled(false);    //禁止按确认按钮lb3.setVisible(false);all.setBackground(Color.GREEN);}}else if(e.getSource()==bnt2)     //重开{cnt=0;      //重开次数置零lb1.setText("您已经猜了"+cnt+"次");generate(); //生成新数all.setBackground(null);   //清除背景色inp.setText(null);      //清空输入框inp.setEditable(true);lb4.setVisible(false);  //胜利提示关掉bnt1.setEnabled(true);    //允许按确认按钮lb3.setVisible(false);}else {       //退出System.exit(0);}}
}
public class guess {public static void main(String[] args) {new Gs();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

垃圾邮件(短信)分类算法实现 机器学习 深度学习 计算机竞赛

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 垃圾邮件(短信)分类算…

【论文复现】基于多模态深度学习方法的单细胞多组学数据聚类(【生物信息学】实验二:多组学数据融合:scMDC)

目录 一、实验介绍 1. 论文&#xff1a;基于多模态深度学习方法的单细胞多组学数据聚类 Abstract 2. Github链接 二、实验环境 0. 作者要求 1. 环境复现 实验一 实验二&#xff08;本实验&#xff09; 2. 库版本介绍 实验一 实验二 3. IDE 三、实验内容 1. 用法…

Linux基础命令1——Linux的命令格式与命令分类

目录 Linux命令格式 Linux命令分类 如何判断命令的类型——Type命令 内置命令 外部命令 alias命令 命令的执行效率与过程 Linux命令格式 命令格式 完整的命令格式分为三部分&#xff1a;命令、参数、对象 其中命令与参数、参数与参数、参数与对象之间最少要有一个空格做…

Bootstrap的旋转器组件

旋转效果可以用来指示状态&#xff0c;比如页面的加载状态。 可以用类spinner-border实现普通旋转的旋转器效果。 用类spinner-grow实现渐渐变大的旋转器效果。 01-最基本的示例代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8">…

cocos creator 小游戏允许他人访问本地项目

需求背景&#xff1a; 发版成微信小游戏前&#xff0c;需要策划介入体验。不上传微信体验版本 实现&#xff1a; 1.发布平台选择web桌面端 2.构建完成后点击运行从浏览器上获取本地的运行地址 3.winR ——》 cmd 控制台 输入 ipconfig 找到IPv4地址&#xff0c;替换本地部分 …

Qt音乐播放器

简介 使用QMediaPlayer和QMediaPlaylist制作的音乐播放器 编译环境 Qt5.6 MGW32 windows10 功能特性 GUI 功能 加载mp3文件&#xff0c;得到歌曲信息&#xff1b;打开文件夹加载或拖拽音乐文件加载滑动条关联播放进度、音量显示/隐藏歌曲列表&#xff0c;编辑歌曲列表&am…

性能与效果平衡:选择适合项目的直播实时美颜SDK

当下&#xff0c;越来越多的主播和内容创作者依赖于实时美颜技术&#xff0c;以确保他们在镜头前始终保持最佳状态。为了实现这一目标&#xff0c;许多开发者和团队开始探索主播直播美颜SDK&#xff0c;但在选择适合项目的SDK时&#xff0c;性能与效果的平衡变得尤为重要。 本…

【计算机网络】UDP/TCP协议

文章目录 :peach:1 UDP协议:peach:1.1 :apple:UDP协议端格式:apple:1.2 :apple:UDP的特点:apple:1.3 :apple:UDP的缓冲区:apple:1.4 :apple:UDP使用注意事项:apple:1.5 :apple:基于UDP的应用层协议:apple: 2 :peach:TCP协议:peach:2.1 :apple:TCP协议端格式:apple:2.2 :apple:确…

32二叉树——DFS深度优先遍历

目录 深度优先算法&#xff08;Depth-First Search&#xff0c;DFS&#xff09; LeetCode之路——102. 二叉树的层序遍历 分析 深度优先算法&#xff08;Depth-First Search&#xff0c;DFS&#xff09; DFS是一种用于遍历或搜索树状数据结构的算法&#xff0c;其中它首先探…

WSL2的安装与配置(创建Anaconda虚拟环境、更新软件包、安装PyTorch、VSCode)

1. WSL2 安装 以管理员身份打开 PowerShell&#xff08;“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”&#xff09;&#xff0c;然后输入以下命令&#xff1a; dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /a…

如何创建高效的 Python Docker 镜像详解

Docker是打包和部署容器中应用程序的行业标准软件。Docker镜像是构建和运行应用程序的基础&#xff0c;为了充分发挥Docker的潜力&#xff0c;您需要优化镜像以提高资源效率、安全性和性能。这将确保您的应用程序在Docker生态系统内无缝运行。 通过一个实际示例来学习如何实现…

云服务器搭建Hadoop分布式

文章目录 1.服务器配置2.Java环境3. 安装Hadoop4. 集群配置5. 编写集群的启动脚本 1.服务器配置 服务器主机名配置115.157.197.82s110核115.157.197.84s210核115.157.197.109s310核115.157.197.31s410核115.157.197.60gracal10核 所有的软件安装在/opt/module下&#xff0c;软…

3BHE003855R0001 UNS2882A 用于嵌入式/工业用途的人工智能盒

3BHE003855R0001 UNS2882A 用于嵌入式/工业用途的人工智能盒. 无风扇iBOX 1200系列包括型号iBOX-1265 UE/iBOX-1245 UE/iBOX-1215 UE&#xff0c;由第12代英特尔酷睿i7/i5/i3处理器(Alder Lake-P)提供动力&#xff0c;通过英特尔Iris Xe显卡和两个DDR4 3200MHz SO-DIMM提供高达…

麒麟信安受邀协办2023广电五舟行业交流大会,共建信创产业新生态

10月20日&#xff0c;广州广电五舟科技股份有限公司&#xff08;简称“广电五舟”&#xff09;主办的行业交流大会召开&#xff0c;大会围绕智能算力新趋势、共建新生态价值体系、算力发展与生态建设的关系、元宇宙应用展望与生态融合等话题展开深入探讨。麒麟信安作为沈阳站和…

【广州华锐互动】三维全景3D消防科普展馆

在我们的日常生活中&#xff0c;火灾安全是一个不容忽视的重要问题。然而&#xff0c;由于缺乏对火灾的了解和应对技巧&#xff0c;许多人在面对火灾时往往感到无助和恐慌。为了解决这个问题&#xff0c;广州华锐互动开发了三维全景3D消防科普展馆&#xff0c;它是一个以虚拟现…

CorelDRAW和InDesign软件的功能区别

Corel和Ilustrator都是基于矢量的排版软件。另一方面&#xff0c;InDesign的主要目的是基于包含不同基本网格设计&#xff0c;以及标题和段落样式信息的母版页来制作多页面布局&#xff0c;例如杂志或书籍&#xff0c;这为了使出版物保持一致。 CorelDRAW图形套件是加拿大Core…

hello react

react中文官网 一、什么是react React是一个由Facebook开源的JavaScript库&#xff0c;用于构建用户界面。它基于组件化的思想&#xff0c;将界面拆分成多个独立的、可复用的组件&#xff0c;并通过组件之间的交互构建整个用户界面。React使用虚拟DOM&#xff08;Virtual DOM…

不拼花哨,只拼实用:unittest指南,干货为王!

Python为开发者提供了内置的单元测试框架 unittest&#xff0c;它是一种强大的工具&#xff0c;能够有效地编写和执行单元测试。unittest 提供了完整的测试结构&#xff0c;支持自动化测试的执行&#xff0c;能够对测试用例进行组织&#xff0c;并且提供了丰富的断言方法。最终…

接口自动化测试工具大全

在互联网时代&#xff0c;服务端测试已经成为一个重要的产品保障手段&#xff0c;各对此公司实施的方法和技术也不同&#xff0c;本文我们就来讨论一下。 互联网服务端接口自动化是各个公司都需要一部分业务&#xff0c;如何快速高效地完成接口测试呢&#xff1f; 以帮助大家实…

redhat配置本地yum源(超详细,超简单)

目录 ​编辑 1、硬件配置 2、配置本地yum源 1、硬件配置 注意这里要使用iso文件&#xff0c;并且要选择启动时连接 2、配置本地yum源 创建本地源文件夹 mkdir -p /mnt/cdrom 挂载镜像文件至指定的目录 mount /dev/cdrom /mnt/cdrom 备份本地源 cp -rf /etc/yum.repos.d…