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

400-850-8622

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

怎么用java做游戲?

主要是用Java分支中的J2ME來(lái)寫(xiě),但是J2ME中需要Java的基礎(chǔ)知識(shí)。

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

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

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

2、面向?qū)ο蟮乃枷耄侯?lèi)和對(duì)象的概念,繼承和多態(tài)等等。

3、異常處理

4、多線程

J2ME中沒(méi)有用到的Java基礎(chǔ)知識(shí):

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

2、Java基礎(chǔ)中的很多類(lèi)在J2ME中沒(méi)有,或者類(lèi)中的方法做了大量的精簡(jiǎn)。所以建議在J2ME中熟悉類(lèi)庫(kù)。

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

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

1

相關(guān)問(wèn)題全部

.,,,,..

我來(lái)了。

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

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

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

4.豆豆的位置信息是二維的,所以我簡(jiǎn)單定義了一個(gè)類(lèi)用來(lái)保存二維信息。

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

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

在蛇身移動(dòng)時(shí)進(jìn)一步做吃掉食物、撞墻、撞到自己的處理。這是游戲的主要邏輯。

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

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

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

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


啊,不止一次的被問(wèn)過(guò)這個(gè)問(wèn)題。

作為世界上最強(qiáng)大的開(kāi)源語(yǔ)言之一,Java能做任何事,寫(xiě)個(gè)框架?寫(xiě)個(gè)程序?或者說(shuō)——做個(gè)游戲?

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

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

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

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

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

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

Java可以做3D游戲,可以做非??犰诺?D游戲,性能并不比那些C++的引擎差!而開(kāi)發(fā)效率又要高處好幾個(gè)數(shù)量級(jí)!

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

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

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

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

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

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

java界面設(shè)計(jì),這個(gè)界面該怎么設(shè)計(jì)啊,求高手指點(diǎn)啊

按照你的要求編寫(xiě)的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("輸入選號(hào):");
?JLabel?jl3=new?JLabel("當(dāng)前選號(hào):");
?JLabel?jl4=new?JLabel();????
??jtf=new?(5);
?JTextArea?jta=new?JTextArea(5,20);
?JButton?jb1=new?JButton("添加本組號(hào)碼");
?JButton?jb2=new?JButton("驗(yàn)證并保存到文件");
?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ù)超過(guò)7個(gè)!");
??????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("本期開(kāi)獎(jiǎng)號(hào)碼:"+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();
?}
}

運(yùn)行結(jié)果:

java界面設(shè)計(jì)

你已經(jīng)將p1和p2添加到p中,所以只需要向Frame添加一個(gè)p就可以了
this.(p1); //去掉
this.(p2); //去掉
this.(p); //將這句改成this.add(p);
修改后的程序我運(yùn)行了,可以顯示了。你試試吧 不懂在追問(wèn)

誰(shuí)能給一個(gè)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.()
//開(kāi)始圖片
Image startimg;
//背景圖片
Image bjimg,fontimg;
//畫(huà)開(kāi)始界面
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);
};
這是我以前做的一個(gè)很簡(jiǎn)單的游戲中的幾行代碼,對(duì)你的問(wèn)題,你要手動(dòng)選擇圖片,那做個(gè)文件選擇器,把圖片路徑作為方法參數(shù)傳進(jìn)去就ok了

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

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è)計(jì)

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è)計(jì) 打醬油的別來(lái)~~~

*化再還原之后,日志記錄區(qū)域變大了
問(wèn)題主要是在這里吧。
方案1.
將一個(gè)panBody拆成兩個(gè)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();
}
}
如果你要求窗體變化時(shí)TEXTAREA的長(zhǎng)度變化,而高度不變,這個(gè)應(yīng)該不是布局所能做到的了,
布局就是使窗體中的控件能作到自適應(yīng)。
如果是這個(gè)要求。
用可以實(shí)現(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è),來(lái)校區(qū)前請(qǐng)先電話(huà)咨詢(xún),方便我校安排相關(guān)的專(zhuān)業(yè)老師為您解答
相關(guān)資料
姓名不能為空
手機(jī)號(hào)格式錯(cuò)誤