我们秉承“快速入门、快速实战”的理念,开发这套系列教材;就是希望朋友们在学习过程中,尽快进入实战环节,尽快介入项目,让大家更有兴趣、更有成就感,从而带来更大的学习动力。

如下的小项目,对于第一次接触编程的朋友从理解上会有难度。但是,我们这个项目不在于让大家理解代码本身,而是让大家“重在体验敲代码的感觉”。

【项目】桌球游戏小项目

练习目标:
1. 找到敲代码的感觉
2. 收获敲代码的兴趣
3. 作出效果,找到自信
4. 从一开始就学会调试错误
5. 掌握 Java 代码基本结构

项目需求:
桌球在球桌中按照一定线路和角度移动,遇到边框会自动弹回。

要求:
即使看不太懂,也要照着敲如下游戏代码,至少 5 遍。要求所有字符和源文件一致。如果报异常,请细心看所在行和老师代码有何区别。现阶段不需要理解代码的语法功能,只要按照代码结构输入代码,能够经过调试实现代码的正常运行即可。

下面我们将分以下四个步骤来实现桌球游戏:
第一步:创建项目和窗口。
第二步:加载两个图片。
第三步:实现动画,小球沿着水平方向移动并做边界检测。
第四步:实现小球沿着任意角度飞行(会用到初中学习的三角函数,如果忘记了就想想你们的体育老师吧)。

【注】:源码和图片资源下载地址:
链接:https://pan.baidu.com/s/1AfVsy-s0Ws-G04VIH4B0PA 提取码:mjg7

第一步:
创建项目并拷贝图片:在项目名 MyPro01 上单击右键,在菜单中依次选择 new---Folder,创建一个名称是 images 的文件夹,并复制两张图片到该目录下。并在 src 下创建类BallGame.java。eclipse 下项目的最终结构如图 1-40 所示。

绘制窗口的代码如示例 1-3 所示。

【示例 1-3】桌球游戏代码—绘制窗口

import javax.swing.JFrame;
public class BallGame extends JFrame {
// 窗口加载
void launchFrame() {
setSize(300, 300);
setLocation(400, 400);
setVisible(true);
}
// main 方法是程序执行的入口
public static void main(String[ ] args) {
System.out.println(" 我是尚学堂高淇,这个游戏项目让大家体验编程的快感,"
+ "寓教于乐!");
BallGame game = new BallGame();
game.launchFrame();
}
}

执行结果如图 1-41 所示:

第二步:
加载两个图片:我们要在 BallGame 类中添加小球和桌面的路径,并指定小球出现在窗口的的初始位置。然后添加 paint 方法,加载小球和桌面。代码如示例 1-4 所示。

【示例 1-4】桌球游戏代码—加载图片

import java.awt.*;
import javax.swing.JFrame;
public class BallGame extends JFrame {
//添加小球和桌面图片的路径
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
//指定小球的初始位置
double x=100; //小球的横坐标
double y=100; //小球的纵坐标
//画窗口的方法:加载小球与桌面
public void paint(Graphics g){
System.out.println("窗口被画了一次!");
g.drawImage(desk, 0, 0, null);
g.drawImage(ball, (int)x, (int)y, null);
}//窗口加载
void launchFrame(){
setSize(856,500);
setLocation(50,50);
setVisible(true);
}//main 方法是程序执行的入口
public static void main(String[ ] args){
System.out.println(" 我是尚学堂高淇,这个游戏项目让大家体验编程的快感,"
+ "寓教于乐!");
BallGame game = new BallGame();
game.launchFrame();
}}

执行结果如图 1-42 所示:

注意:
由于懒加载问题,有可能出现第一次加载图片无效的情况;请最小化窗口再打开即可。稍后
大家完成第三步后,就完全不存在这个问题了。

第三步:
实现动画,小球沿着水平方向移动并做边界检测。 要实现动画的关键是改变小球的坐标,并且要不停的重画窗口来更新小球的坐标;边界检测则是判断小球的坐标是否超出桌面的范围,如果超出则要改变小球原来的运动方向。代码如示例 1-5 所示。

【示例 1-5】桌球游戏代码—实现水平方向来回飞行

import java.awt.*;
import javax.swing.JFrame;
public class BallGame extends JFrame {
//添加小球和桌面图片的路径
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");//指定小球的初始位置
double x=100; //小球的横坐标
double y=100; //小球的纵坐标
boolean right = true; //判断小球的方向
//画窗口的方法:加载小球与桌面
public void paint(Graphics g){
System.out.println("窗口被画了一次!");
g.drawImage(desk, 0, 0, null);
g.drawImage(ball, (int)x, (int)y, null);
//改变小球坐标
if(right){
x = x +10;
}else{
x = x - 10;
}
//边界检测
//856 是窗口宽度,40 是桌子边框的宽度,30 是小球的直径
if(x>856-40-30){
right = false;
}
if(x<40){
right = true;
}}//窗口加载
void launchFrame(){
setSize(856,500);
setLocation(50,50);
setVisible(true);
//重画窗口,每秒画 25 次
while(true){
repaint(); //调用 repaint 方法,窗口即可重画
try{
Thread.sleep(40); //40ms, 1 秒=1000 毫秒. 大约一秒画25 次窗口
}catch(Exception e){
e.printStackTrace();
}
}
}//main 方法是程序执行的入口
public static void main(String[ ] args){
System.out.println(" 我是尚学堂高淇,这个游戏项目让大家体验编程的快感,"
+ "寓教于乐!");
BallGame game = new BallGame();
game.launchFrame();
}}

第四步:
实现小球沿着任意角度飞行:此时小球的运动方向不能再单纯的使用 right 来表示,需要一个表示角度的变量 degree,小球坐标的改变也要依据这个角度。代码如示例 1-6 所示(为了保存第三步的代码,我们新创建了一个类 BallGame2)。

【示例 1-6】桌球游戏代码—实现任意角度飞行

import java.awt.*;
import javax.swing.JFrame;
public class BallGame2 extends JFrame {
//添加小球和桌面图片的路径
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");//指定小球的初始位置
double x=100; //小球的横坐标
double y=100; //小球的纵坐标
double degree = 3.14/3; //弧度:小球的运动角度,此处就是 60 度
//画窗口的方法:加载小球与桌面
public void paint(Graphics g){
System.out.println("窗口被画了一次!");
g.drawImage(desk, 0, 0, null);
g.drawImage(ball, (int)x, (int)y, null);
//根据角度 degree 改变小球坐标
x = x+ 10*Math.cos(degree);
y = y +10*Math.sin(degree);//边界检测:碰到上下边界
//500 是窗口高度;40 是桌子边框,30 是球直径;最后一个 40 是标题栏的高度
if(y>500-40-30||y<40+40){
degree = -degree;
}
//边界检测:碰到左右边界
//856 是窗口宽度,40 是桌子边框的宽度,30 是小球的直径
if(x<40||x>856-40-30){
degree = 3.14 - degree;
}}//窗口加载
void launchFrame(){
setSize(856,500);
setLocation(50,50);
setVisible(true);
//重画窗口,每秒画 25 次
while(true){
repaint(); //调用 repaint 方法,窗口即可重画
try{
Thread.sleep(40); //40ms, 1 秒=1000 毫秒. 大约一秒画25 次窗口
}catch(Exception e){
e.printStackTrace();
}}}//main 方法是程序执行的入口
public static void main(String[ ] args){
System.out.println(" 我是尚学堂高淇,这个游戏项目让大家体验编程的快感,"
+ "寓教于乐!");
BallGame2 game = new BallGame2();
game.launchFrame();
}}

1.8 30 分钟完成桌球小游戏项目相关推荐

  1. 30分钟完成桌球小游戏项目

    桌球在球桌中按照一定线路和角度移动,遇到边框会自动弹回. http://www.sxt.cn/Java_jQuery_in_action/Billiards_Games.html; 练手项目加速度控制 ...

  2. 30分钟java桌球小游戏_30分钟完成桌球小游戏项目

    桌球在球桌中按照一定线路和角度移动,遇到边框会自动弹回. 练手项目加速度控制 //添加速度控制的台球游戏 import java.awt.*; import javax.swing.*; public ...

  3. 30分钟java桌球小游戏_Java桌球小游戏(兴趣制作)

    两张图片放在src的同级目录下 版本一.出现窗口 package cn.xjion.game; /** * 出现窗口 * @author xjion * */ import java.awt.*; i ...

  4. 5分钟完成桌面小游戏项目

    桌面小游戏 下面分成四个步骤来实现项目 第一步:创建项目和窗口. 第二步:加载两张图片(ball.png和desk.jpg). 第三步:实现动画,让小球沿水平方向移动并做边界检测. 第四步:实现小球沿 ...

  5. java编写桌球游戏素材小球图片_Java|零基础开发桌球小游戏项目

    //桌球游戏开发 import java.awt.; import javax.swing.; public class BallGame2 extends JFrame { Image ball=T ...

  6. 【小程序云开发】30分钟搭建个人相册小程序

    文章目录 前言 最终效果 准备工作 小程序架构 创建小程序云开发环境 创建数据库 搭建个人相册 写在最后 前言 图片存储,是所有应用开发里最常见的场景之一. 本文将通过实战"个人相册小程序& ...

  7. 告别后端!阿里云小程序 Serverless 教你如何 30 分钟开发小程序!

    CSDN摄于云栖大会 整理 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 2018 年 9 月 12 日,支付宝小程序正式上线.仅仅过去一年时间,支付宝小程序发展飞速:月活跃用户数突破5亿 ...

  8. <微信小程序>登录界面实现密码输入错误3次,30分钟不允许该账号登录

    当时面临如此需求,实在无从下手,后自己想了一个灵活的方法进行面对,特此记录,希望以后不会看不懂自己的代码 登陆界面设置 这个百度一下就可以,与数据库交互的登录界面很是简单,由于本项目要求不可注册,故只 ...

  9. 微信小程序 多个商品 30分钟倒计时

    商品30分钟倒计时, //30分钟倒计时Page({/*** 页面的初始数据*/data: {order: [{_id: 'wersdfsdfe89',status: 'unpay',//未支付状态p ...

  10. 《神奇:长达30分钟的3D视频,只需200多K》中隐藏程序到Jpg图片中的小工具

    今天同事发了一个好玩的东西, 共享 给大家: 神奇:长达30分钟的3D视频,只需200多K 表面看起来这是一只小鸭的图片,然而把文件后缀名改成RAR,然后解压缩,很神奇的事情就发生了!  推荐配置:2 ...

最新文章

  1. Java记录 -24- equals方法重写
  2. 李飞飞点赞的NeurIPS新赛道,刚刚公布了第一批数据集benchmark入围名单
  3. LeetCode Surrounded Regions(floodfill算法)
  4. iphone双卡_不吹不黑,今年的四款iPhone到底谁最值得买?
  5. 径向基函数插值(3)二维数据的插值
  6. Hadoop wordcount
  7. 用java实现楼层导航_JS实现网站楼层导航效果代码实例
  8. python怎么画圆圈_python怎么画圆
  9. (进阶)LeetCode(258)——各位相加(JavaScript)
  10. fedora 14 安装virtualbox
  11. 单片机复位电路基础知识解析
  12. 利用MsOffice将PPT转换成图片
  13. pythonturtle作品编程技巧说明_在Python教学中应用turtle创意编程实践
  14. VirtualBox
  15. Python库积累之Selenium(一)-Seleniun基础
  16. 5月6阴阳师服务器维护,《阴阳师》手游5月6日维护更新公告
  17. 线性回归的从零开始实现
  18. 线性回归的神经网络法——机器学习
  19. 远程登陆没有固定ip的服务器
  20. unity pdg 设置隐藏不需要的节点以及实现自动勾选自动加载项

热门文章

  1. html图片格式有什么,jpeg是一种什么格式?
  2. window11 网络突然就用不了,系统更新网络就用不了了,DNS服务器可能不可用
  3. python爬虫-批量下载qq音乐
  4. linux系统开机自动锁定键盘,设置linux开机启动小键盘的详细教程设置linux开机启动小键盘的图文教程...
  5. emacs常用配置-Hippie-expand自动补全
  6. Troubleshooting Consolidation
  7. 一年级上册计算机教学计划,人教版数学一年级上册教学计划
  8. nodejs async.whilst用法
  9. 分享-IE游览器升级工具
  10. SAP 业务技术平台(BTP) Workflow(工作流)功能介绍