114培訓(xùn)網(wǎng)歡迎您來到游戲設(shè)計交流中心!

400-850-8622

全國統(tǒng)一學(xué)習(xí)專線 9:00-21:00

怎么用java做游戲?

主要是用Java分支中的J2ME來寫,但是J2ME中需要Java的基礎(chǔ)知識。

現(xiàn)在有大部分人,都是從零開始學(xué)J2ME的,學(xué)習(xí)J2ME的時候,總是從Java基礎(chǔ)開始學(xué)習(xí),而且現(xiàn)在講Java基礎(chǔ)的書籍中都是以J2SE來講基礎(chǔ),這就給學(xué)習(xí)造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎(chǔ)知識做一個簡單的說明。

J2ME中使用到的Java基礎(chǔ)知識:

1、Java語法基礎(chǔ):包括基本數(shù)據(jù)類型、關(guān)鍵字、運算符等等

2、面向?qū)ο蟮乃枷耄侯惡蛯ο蟮母拍?,繼承和多態(tài)等等。

3、異常處理

4、多線程

J2ME中沒有用到的Java基礎(chǔ)知識:

1、JDK中javac和java命令的使用

2、Java基礎(chǔ)中的很多類在J2ME中沒有,或者類中的方法做了大量的精簡。所以建議在J2ME中熟悉類庫。

3、Applet、AWT、Swing這些知識在J2ME中根本使用不到。

簡單說這么多,希望學(xué)J2ME的朋友們能少走一些彎路,不足之處希望大家積極指正和補充

1

相關(guān)問題全部

.,,,,..

我來了。

1.設(shè)計游戲,首先就要設(shè)計界面。首先看一下我設(shè)計的一個界面。界面分為左邊的游戲區(qū)與右邊的控制區(qū)。游戲區(qū)包含“得分信息”和貪吃蛇的游戲區(qū),右邊控制區(qū)有“開始”“暫?!薄巴V埂卑粹o,等級選擇單選框以及游戲排行榜。

2.所以我們需要定義swing組件,并在類初始化時初始化這些組件,添加組件。因為后面設(shè)計游戲的時候,我們要確切知道游戲區(qū)的大小,所以這里設(shè)置游戲區(qū)固定大小值。本來想用布局來更好的管理,但作者對布局也掌握不夠,所以就先設(shè)置固定大小吧。

3.定義我們的游戲。貪吃蛇游戲其實就是包含很多細小網(wǎng)格,然后蛇在網(wǎng)格中移動。蛇由一連串的網(wǎng)格組成,為了視覺效果,蛇身用藍色標(biāo)記,食物用紅色標(biāo)記,背景白色。如*張圖片所示。所以,我們需要定義二維數(shù)組,保存網(wǎng)格信息,保存蛇身和食物的位置信息等。初始化時,還需要添加鍵盤事件控制上下左右移動。

4.豆豆的位置信息是二維的,所以我簡單定義了一個類用來保存二維信息。

5.接著就是實現(xiàn)游戲的功能了。開始,暫停,停止按鈕添加事件控制游戲開始。等級按鈕定義游戲難度等。

6.開始游戲后,我們定義一個定時器。蛇身按照指定的方向移動,方向是通過初始化時添加的鍵盤事件,鍵盤的上下左右按鈕來控制。蛇身是連續(xù)的位置信息,保存到隊列中,所以蛇身的移動就是隊首增加一個位置,隊尾減少位置,然后重新繪畫游戲區(qū)就可以了。

在蛇身移動時進一步做吃掉食物、撞墻、撞到自己的處理。這是游戲的主要邏輯。

7.*,游戲結(jié)束我們彈出一個對話框提示是否保存游戲得分。我們制作了排行榜信息,只保留名的游戲得分。首先定義了一個實現(xiàn)接口的游戲得分類,按得分高,時間最早來排序。

8.游戲結(jié)束時保存得分信息,看是否進入到排行榜中。而之前在初始化排行榜組件時就會加載游戲排行榜信息。

通過保存和讀取排行榜信息,我們也熟悉一下文件讀取操作,還有集合、排序算法的功能。

9.我是傳播愛與正義的小蕪?fù)瑢W(xué),我的回答結(jié)束。


啊,不止一次的被問過這個問題。

作為世界上最強大的開源語言之一,Java能做任何事,寫個框架?寫個程序?或者說——做個游戲?

但首先你得會使用引擎——unity、虛幻,哪怕是寒霜都成,但你得會一個。

然后是最難的部分之一——模型,和貼圖。一般來說,3DSMAX較多的用作游戲開發(fā),但如果是虛幻,MAYA更方便一些。建好模型,再繪制貼圖,把它扔到引擎里,*步就算完成了。

然后,繪制場景——這需要你擁有高超的關(guān)卡設(shè)計能力,這步通常需要很長時間的學(xué)習(xí)。

然后你就可以進行程序開發(fā)了,使用Java,制作主程序,再在主程序的基礎(chǔ)上,制作條件、精靈,和任務(wù)等等。

*,再用你那高超的UI設(shè)計能力,做一個UI,除錯后打包,你的游戲就算是完成了!

題主加油,等著你的游戲。

Java可以做3D游戲,可以做非常酷炫的3D游戲,性能并不比那些C++的引擎差!而開發(fā)效率又要高處好幾個數(shù)量級!

為什么呢?因為游戲底層的圖形渲染實質(zhì)上都是OpenGL或者Direct3D,現(xiàn)代游戲引擎不大可能讓你手動去做圖形運算,復(fù)雜的東西都是交給底層的dll/so靜態(tài)庫文件以及GPU執(zhí)行的,上層代碼主要做好場景管理和邏輯控制。這也是為什么Unity3D這個引擎居然可以使用C#和作為它的游戲腳本,而從來沒有人說Unity3D引擎的游戲性能差。

另外,游戲的畫面,不管3D還是2D游戲,影響畫面效果的主要因素是游戲素材,而不是編程語言。3D游戲又有獨特的著色器語言專門負責(zé)圖形特效。什么HDR、PBR、SSAO、動態(tài)模糊、次世代法線貼圖,通通都是靠Shader搞定的,跟你用什么語言來寫游戲邏輯沒有半毛錢關(guān)系。

反觀Java本身的性能,現(xiàn)代編程語言除了C/C++,真沒有哪個敢在Java面前夸自己性能的。而且Java有眾多的開源類庫,憑什么我們不能用Java來做游戲呢?

誠然,Unity3D、CryEngine、Unreal這樣的商業(yè)引擎不僅僅是個游戲引擎,它們還有很多成熟的配套工具和資源工廠,這是Java游戲引擎所不具備的。

java 設(shè)計自己的用戶界面,通常有6個步驟,分別是哪6步?

1、分析業(yè)務(wù)需求, 理順業(yè)務(wù)邏輯;
2, 根據(jù)業(yè)務(wù)需要考慮使用何種容器(JFrame ,Frame ,JWindow..) 需要的數(shù)量;
3, 每個容器(窗口)使用組件;
4.組件使用何種布局方式(邊界布局,絕對布局,網(wǎng)格布局..),排列在容器(窗口)中;
5.組件中需要響應(yīng)那些事件, 把事件響應(yīng)代碼寫好,然后綁定到組件上(...)
6.調(diào)試。

java界面設(shè)計,這個界面該怎么設(shè)計啊,求高手指點啊

按照你的要求編寫的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("當(dāng)前選號:");
?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,?"輸入的數(shù)重復(fù)!");
?????jtf.();
?????return;
????}
????int?num=Integer.parseInt(str);
????if(num<1?||?num>35){
?????.(null,?"輸入的數(shù)需要在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,?"輸入的數(shù)超過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();
?}
}

運行結(jié)果:

java界面設(shè)計

你已經(jīng)將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);
};
這是我以前做的一個很簡單的游戲中的幾行代碼,對你的問題,你要手動選擇圖片,那做個文件選擇器,把圖片路徑作為方法參數(shù)傳進去就ok了

用java設(shè)計界面,怎么把一個界面分成獨立的三塊,求高手解答,謝謝

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 界面設(shè)計

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 界面設(shè)計 打醬油的別來~~~

*化再還原之后,日志記錄區(qū)域變大了
問題主要是在這里吧。
方案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的長度變化,而高度不變,這個應(yīng)該不是布局所能做到的了,
布局就是使窗體中的控件能作到自適應(yīng)。
如果是這個要求。
用可以實現(xiàn)這樣的效果
方案二
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
}
}

溫馨提示:為不影響您的學(xué)業(yè),來校區(qū)前請先電話咨詢,方便我校安排相關(guān)的專業(yè)老師為您解答
相關(guān)資料
姓名不能為空
手機號格式錯誤