怎么用java做游戏?
主要是用Java分支中的J2ME来写,但是J2ME中需要Java的基础知识。
现在有大部分人,都是从零开始学J2ME的,学习J2ME的时候,总是从Java基础开始学习,而且现在讲Java基础的书籍中都是以J2SE来讲基础,这就给学习造成了一些不必要的麻烦,下面将J2ME中用到的和不需要的Java基础知识做一个简单的说明。
J2ME中使用到的Java基础知识:
1、Java语法基础:包括基本数据类型、关键字、运算符等等
2、面向对象的思想:类和对象的概念,继承和多态等等。
3、异常处理
4、多线程
J2ME中没有用到的Java基础知识:
1、JDK中javac和java命令的使用
2、Java基础中的很多类在J2ME中没有,或者类中的方法做了大量的精简。所以建议在J2ME中熟悉类库。
3、Applet、AWT、Swing这些知识在J2ME中根本使用不到。
简单说这么多,希望学J2ME的朋友们能少走一些弯路,不足之处希望大家积极指正和补充
1
相关问题全部
.,,,,..
我来了。
1.设计游戏,首先就要设计界面。首先看一下我设计的一个界面。界面分为左边的游戏区与右边的控制区。游戏区包含“得分信息”和贪吃蛇的游戏区,右边控制区有“开始”“暂停”“停止”按钮,等级选择单选框以及游戏排行榜。
2.所以我们需要定义swing组件,并在类初始化时初始化这些组件,添加组件。因为后面设计游戏的时候,我们要确切知道游戏区的大小,所以这里设置游戏区固定大小值。本来想用布局来更好的管理,但作者对布局也掌握不够,所以就先设置固定大小吧。
3.定义我们的游戏。贪吃蛇游戏其实就是包含很多细小网格,然后蛇在网格中移动。蛇由一连串的网格组成,为了视觉效果,蛇身用蓝色标记,食物用红色标记,背景白色。如*张图片所示。所以,我们需要定义二维数组,保存网格信息,保存蛇身和食物的位置信息等。初始化时,还需要添加键盘事件控制上下左右移动。
4.豆豆的位置信息是二维的,所以我简单定义了一个类用来保存二维信息。
5.接着就是实现游戏的功能了。开始,暂停,停止按钮添加事件控制游戏开始。等级按钮定义游戏难度等。
6.开始游戏后,我们定义一个定时器。蛇身按照指定的方向移动,方向是通过初始化时添加的键盘事件,键盘的上下左右按钮来控制。蛇身是连续的位置信息,保存到队列中,所以蛇身的移动就是队首增加一个位置,队尾减少位置,然后重新绘画游戏区就可以了。
在蛇身移动时进一步做吃掉食物、撞墙、撞到自己的处理。这是游戏的主要逻辑。
7.*,游戏结束我们弹出一个对话框提示是否保存游戏得分。我们制作了排行榜信息,只保留名的游戏得分。首先定义了一个实现接口的游戏得分类,按得分高,时间最早来排序。
8.游戏结束时保存得分信息,看是否进入到排行榜中。而之前在初始化排行榜组件时就会加载游戏排行榜信息。
通过保存和读取排行榜信息,我们也熟悉一下文件读取操作,还有集合、排序算法的功能。
9.我是传播爱与正义的小芜同学,我的回答结束。
啊,不止一次的被问过这个问题。
作为世界上最强大的开源语言之一,Java能做任何事,写个框架?写个程序?或者说——做个游戏?
但首先你得会使用引擎——unity、虚幻,哪怕是寒霜都成,但你得会一个。
然后是最难的部分之一——模型,和贴图。一般来说,3DSMAX较多的用作游戏开发,但如果是虚幻,MAYA更方便一些。建好模型,再绘制贴图,把它扔到引擎里,*步就算完成了。
然后,绘制场景——这需要你拥有高超的关卡设计能力,这步通常需要很长时间的学习。
然后你就可以进行程序开发了,使用Java,制作主程序,再在主程序的基础上,制作条件、精灵,和任务等等。
*,再用你那高超的UI设计能力,做一个UI,除错后打包,你的游戏就算是完成了!
题主加油,等着你的游戏。
Java可以做3D游戏,可以做非常酷炫的3D游戏,性能并不比那些C++的引擎差!而开发效率又要高处好几个数量级!
为什么呢?因为游戏底层的图形渲染实质上都是OpenGL或者Direct3D,现代游戏引擎不大可能让你手动去做图形运算,复杂的东西都是交给底层的dll/so静态库文件以及GPU执行的,上层代码主要做好场景管理和逻辑控制。这也是为什么Unity3D这个引擎居然可以使用C#和作为它的游戏脚本,而从来没有人说Unity3D引擎的游戏性能差。
另外,游戏的画面,不管3D还是2D游戏,影响画面效果的主要因素是游戏素材,而不是编程语言。3D游戏又有独特的着色器语言专门负责图形特效。什么HDR、PBR、SSAO、动态模糊、次世代法线贴图,通通都是靠Shader搞定的,跟你用什么语言来写游戏逻辑没有半毛钱关系。
反观Java本身的性能,现代编程语言除了C/C++,真没有哪个敢在Java面前夸自己性能的。而且Java有众多的开源类库,凭什么我们不能用Java来做游戏呢?
诚然,Unity3D、CryEngine、Unreal这样的商业引擎不仅仅是个游戏引擎,它们还有很多成熟的配套工具和资源工厂,这是Java游戏引擎所不具备的。
java 设计自己的用户界面,通常有6个步骤,分别是哪6步?
1、分析业务需求, 理顺业务逻辑;
2, 根据业务需要考虑使用何种容器(JFrame ,Frame ,JWindow..) 需要的数量;
3, 每个容器(窗口)使用组件;
4.组件使用何种布局方式(边界布局,绝对布局,网格布局..),排列在容器(窗口)中;
5.组件中需要响应那些事件, 把事件响应代码写好,然后绑定到组件上(...)
6.调试。
java界面设计,这个界面该怎么设计啊,求高手指点啊
按照你的要求编写的Java程序如下:
import java.awt.;
import java.awt.;
import java.awt.Font;
import java.awt.;
import java.awt.event.;
import java.awt.event.;
import java.io.;
import java.io.;
import java.io.;
import java.util.Arrays;
import javax.swing.;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.;
public class CCG extends JFrame {
JLabel jl1=new JLabel("35选7",JLabel.LEFT);
JLabel jl2=new JLabel("输入选号:");
JLabel jl3=new JLabel("当前选号:");
JLabel jl4=new JLabel();
jtf=new (5);
JTextArea jta=new JTextArea(5,20);
JButton jb1=new JButton("添加本组号码");
JButton jb2=new JButton("验证并保存到文件");
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
JPanel jp4=new JPanel();
JPanel jp5=new JPanel();
JPanel jp6=new JPanel();
JPanel jp7=new JPanel();
boolean saveFlag=false;
CCG(){
super("Lottery");
jtf.(this);
jb1.(this);
jb2.(this);
jl1.setFont(new Font(null,Font.BOLD,20));
jp1.setLayout(new (.LEFT));
jp1.add(jl1);
jp1.setBorder(. ());
jp4.setLayout(new (.LEFT));
jp4.add(jl2);jp4.add(jtf);
jp5.setLayout(new (.LEFT));
jp5.add(jl3);jp5.add(jl4);
jp6.setLayout(new (.LEFT));
jp6.add(jb1);
jp2.setLayout(new (3,1));
jp2.add(jp4);jp2.add(jp5);jp2.add(jp6);
jp2.setBorder(. ());
jp3.setLayout(new (.LEFT));
jp3.add(jta);jp3.add(jb2);
jp3.setBorder(. ());
jp7.setLayout(new (2,1));
jp7.add(jp2);
jp7.add(jp3);
add(jp1,.NORTH);
add(jp7,.CENTER);
setSize(400, 300);
(JFrame.EXIT_ON_CLOSE);
(null);
(true);
}
@Override
public void ( ae) {
if(ae.getSource()==jtf){
if(jtf.getText().trim().equals("")){
jl4.setText("");
}else{
int n=Integer.parseInt(jtf.getText().trim());
String str="";
if(n<10)str="0"+n;
else str=n+"";
if(jl4.getText().trim().contains(str)){
.(null, "输入的数重复!");
jtf.();
return;
}
int num=Integer.parseInt(str);
if(num<1 || num>35){
.(null, "输入的数需要在1-35之间!");
jtf.();
return;
}
if(jl4.getText().trim().equals("")){
int t=Integer.parseInt(jtf.getText().trim());
if(t<10) jl4.setText("0"+t);
else jl4.setText(""+t);
}else{
String[]a=(jl4.getText().trim()+","+jtf.getText().trim()).split(",");
if(a.length>7){
.(null, "输入的数超过7个!");
jtf.();
return;
}
int []b=new int[a.length];
for(int i=0;i<a.length;i++){
b[i]=Integer.parseInt(a[i].trim());
}
Arrays.sort(b);
String s="";
for(int i=0;i<b.length;i++){
if(i==b.length-1)
if(b[i]<10)s=s+"0"+b[i];
else s=s+b[i];
else
if(b[i]<10)s=s+"0"+b[i]+",";
else s=s+b[i]+",";
}
jl4.setText(s);
}
}
}
if(ae.getSource()==jb1){
jta.append(jl4.getText().trim()+"n");
saveFlag=true;
}
if(ae.getSource()==jb2){
if(saveFlag==true){
bw = null;
try {
bw=new (new ("lottery.txt",true));
String s=random();
bw.append("本期开奖号码:"+s);
bw.newLine();
String[]a=jta.getText().split("n");
for(int i=0;i<a.length;i++){
int count=0;
String[]b=a[i].split(",");
String tmp="";
for(int j=0;j<b.length;j++){
if(s.contains(b[j].trim()))count++;
if(j==b.length-1){
tmp=tmp+b[j].trim();
}else{
tmp=tmp+b[j].trim()+",";
}
}
String tmpwrite=tmp+" - "+count;
bw.append(tmpwrite);
bw.newLine();
}
bw.flush();
System.out.println("保存完毕!");
saveFlag=false;
} catch ( e) {
e.();
}finally{
try {
bw.close();
} catch ( e) {
e.();
}
}
}
}
}
public String random() {
int []a=new int[7];
int count=0;
while(count<7){
boolean flag=false;
int tmp=(int)(Math.random()*35)+1;
for(int i=0;i<a.length;i++){
if(tmp==a[i]){
flag=true;
}
}
if(flag==false){
a[count]=tmp;
count++;
}
}
Arrays.sort(a);
String s="";
for(int i=0;i<a.length;i++){
if(i==a.length-1){
if(a[i]<10){
s=s+"0"+a[i];
}else{
s=s+a[i];
}
}else{
if(a[i]<10){
s=s+"0"+a[i]+",";
}else{
s=s+a[i]+",";
}
}
}
return s;
}
public static void main(String[] args) {
new CCG();
}
}
运行结果:
java界面设计
你已经将p1和p2添加到p中,所以只需要向Frame添加一个p就可以了
this.(p1); //去掉
this.(p2); //去掉
this.(p); //将这句改成this.add(p);
修改后的程序我运行了,可以显示了。你试试吧 不懂在追问
谁能给一个java游戏初始界面的编程
String []mapimg={"source/font.png","source/ks.jpg","source/1.jpg","source/2.png",
"source/3.jpg","source/youknow.jpg","fight/js.jpg","fight/js1.jpg"};
//获得工具包
Toolkit tool=Toolkit.()
//开始图片
Image startimg;
//背景图片
Image bjimg,fontimg;
//画开始界面
public void drawstart(Graphics g){
startimg=tool.getImage(mapimg[1]);
g.drawImage(startimg, 0, 0, frame.getWidth(), frame.getHeight(), frame);
fontimg=tool.getImage(mapimg[0]);
g.drawImage(fontimg, 20, 30, frame);
};
这是我以前做的一个很简单的游戏中的几行代码,对你的问题,你要手动选择图片,那做个文件选择器,把图片路径作为方法参数传进去就ok了
用java设计界面,怎么把一个界面分成独立的三块,求高手解答,谢谢
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame{
JPanel panel[];
public static void main(String[] args) {
Test t=new Test();
}
Test(){
panel=new JPanel[3];
for(int i=0;i<panel.length;i++){
panel[i]=new JPanel();
}
JButton an[]=new JButton[3];
panel[0].setLayout(new ());
for(int i=0;i<an.length;i++){
an[i]=new JButton("按钮"+(i+1));
panel[0].add(an[i]);
}
JLabel label=new JLabel("显示信息");
panel[1].add(label);
panel[1].(Color.green);
panel[2].add(new JLabel("Game"));
panel[2].(Color.gray);
this.setLayout(new ());
this.add(panel[0],.SOUTH);
this.add(panel[1],.NORTH);
this.add(panel[2],.CENTER);
this.setTitle("游戏");
this.setBounds(200,200,300,300);
this.(false);
this.(JFrame.EXIT_ON_CLOSE);
this.(true);
}
}
Java 界面设计
import java.awt.;
import javax.swing.JPanel;
import javax.swing.;
import java.awt.;
public class Test1 extends JPanel {
private static final long = 1L;
private = null;
/**
* This is the default
*/
public Test1() {
super();
();
}
/**
* This method this
*
* @return void
*/
private void () {
= new ();
.fill = .BOTH;
.gridy = 0;
.weightx = 1.0;
.weighty = 1.0;
.gridx = 0;
this.setSize(300, 200);
this.setLayout(new ());
this.add((), );
}
/**
* This method
*
* @return javax.swing.
*/
private () {
if ( == null) {
= new ();
}
return ;
}
}
楼主是不是要这种的效果???
Java swing 界面设计 打酱油的别来~~~
*化再还原之后,日志记录区域变大了
问题主要是在这里吧。
方案1.
将一个panBody拆成两个PANEL,
分别存放TABLE和TEXTAREA
下边是例子。
import java.awt.;
import java.awt.;
import java.awt.;
import java.awt.;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.;
import javax.swing.JTable;
import javax.swing.JTextArea;
public class TestApp extends JFrame {
private JTable table;
public TestApp() {
(EXIT_ON_CLOSE);
setSize(503, 355);
(null);
JMenuBar menuBar = new JMenuBar();
(menuBar);
JMenu mnNewMenu = new JMenu("New menu");
menuBar.add(mnNewMenu);
JMenuItem = new JMenuItem("New menu item");
mnNewMenu.add();
JMenuItem _1 = new JMenuItem("New menu item");
mnNewMenu.add(_1);
JMenu mnNewMenu_1 = new JMenu("New menu");
menuBar.add(mnNewMenu_1);
().setLayout(new (2, 1, 0, 0));
JPanel panel = new JPanel();
().add(panel);
panel.setLayout(new (0, 0));
= new ();
panel.add(, .CENTER);
table = new JTable();
.(table);
JPanel panel_1 = new JPanel();
().add(panel_1);
gbl_panel_1 = new ();
gbl_panel_1. = new int[]{0, 0};
gbl_panel_1. = new int[]{0, 0};
gbl_panel_1. = new double[]{1.0, Double.MIN_VALUE};
gbl_panel_1. = new double[]{1.0, Double.MIN_VALUE};
panel_1.setLayout(gbl_panel_1);
_1 = new ();
gbc__1 = new ();
gbc__1.fill = .BOTH;
gbc__1.gridx = 0;
gbc__1.gridy = 0;
panel_1.add(_1, gbc__1);
JTextArea textArea = new JTextArea();
_1.(textArea);
(true);
}
public static void main(String[] args) {
new TestApp();
}
}
如果你要求窗体变化时TEXTAREA的长度变化,而高度不变,这个应该不是布局所能做到的了,
布局就是使窗体中的控件能作到自适应。
如果是这个要求。
用可以实现这样的效果
方案二
import java.awt.;
import java.awt.event.;
import java.awt.event.;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.;
import javax.swing.;
import javax.swing.JTable;
import javax.swing.JTextArea;
public class TestApp extends JFrame {
splitPane = null;
int width = 503;
private JTable table;
public TestApp() {
(EXIT_ON_CLOSE);
setSize(503, 355);
(null);
JMenuBar menuBar = new JMenuBar();
(menuBar);
JMenu mnNewMenu = new JMenu("New menu");
menuBar.add(mnNewMenu);
JMenuItem = new JMenuItem("New menu item");
mnNewMenu.add();
JMenuItem _1 = new JMenuItem("New menu item");
mnNewMenu.add(_1);
JMenu mnNewMenu_1 = new JMenu("New menu");
menuBar.add(mnNewMenu_1);
().setLayout(new (0, 0));
splitPane = new ();
splitPane.(.VERTICAL_SPLIT);
splitPane.(this);
().add(splitPane, .CENTER);
JPanel panel = new JPanel();
splitPane.(panel);
panel.setLayout(new (0, 0));
_1 = new ();
panel.add(_1, .CENTER);
JTextArea textArea = new JTextArea();
_1.(textArea);
JPanel panel_1 = new JPanel();
splitPane.(panel_1);
panel_1.setLayout(new (0, 0));
_2 = new ();
panel_1.add(_2, .CENTER);
table = new JTable();
_2.(table);
(true);
}
public static void main(String[] args) {
new TestApp();
}
@Override
public void ( e) {
// TODO Auto-generated method stub
}
@Override
public void ( e) {
// TODO Auto-generated method stub
}
@Override
public void ( e) {
if (this.getWidth() > width) {
splitPane.(0.8);
} else {
splitPane.(0.6);
}
}
@Override
public void ( e) {
// TODO Auto-generated method stub
}
}