java游戏编译(java编写:一个游戏程序)

本文目录
java编写:一个游戏程序
这应该有很多种算法把。。如果不考虑效率的话穷举法是肯定可以的。。。也就是说试过所有的排列组合。。然后计算每次排列的剩余防御卡的价值和。。和最大的排列就是你要的匹配。。当然这个算法 当N很大的时候非常没效率。。但你的问题只要给出算法然后说明正确性。。所以穷举是肯定可行的。。
下面是模拟代码
import java.util.ArrayList;
public class Test {
//攻击卡数组
private int a = {1,1,3,4};
//匹配结果
private ArrayList《int 》();
//防御卡数组
private D d = {new D(1,5),new D(2,2),new D(2,8),new D(3,4)};
//最大防御卡价值初始化为0
private int value = 0;
public static void main(String args){
int input = {1,2,3,4};
Test t = new Test();
t.process(input, input.length, 0);
ArrayList《int 》 r = t.getResult();
int size = r.size();
System.out.println("可能的组合有"+size+"种 ");
for(int i=0;i《size;i++){
int resultSize = r.get(i).length;
System.out.print("第"+(i+1)+"种 为:");
for(int j=0;j《resultSize;j++){
System.out.print(r.get(i));
}
}
System.out.println();
System.out.println("Value = "+t.getValue());
System.out.println("结束");
}
public void process(int input, int n, int k) {
if (n == k) {
int count = 0;
int size = input.length;
int ;
for (int i = 0; i 《 size; i++) {
if(d){
count += d.getY();
}
out ;
}
//如果排列价值和大于之前的最大防御价值改变最优匹配
if(count 》 value){
if(result.size() != 0){
result.clear();
}
result.add(out);
value = count;
for(int in:out){
System.out.print(in);
}
System.out.println();
}
//如果价值和一样并且没有这个组合增加到结果list
if(count == value && !this.inTheResult(input)){
result.add(out);
for(int in:out){
System.out.print(in);
}
System.out.println();
}
} else {
for (int i = k; i 《 n; i++) {
swap(input, k, i);
process(input, n, k + 1);
swap(input, i, k);
}
}
}
public boolean inTheResult(inta){
int size = this.result.size();
for(int i=0;i《size;i++){
int s = this.result.get(i).length;
for(int j=0;j《s;j++){
if(a){
return false;
}
}
}
return true;
}
public ArrayList《int》 getResult(){
return this.result;
}
public int getValue(){
return this.value;
}
public void swap(int a, int x, int y) {
int temp = a;
a;
a = temp;
}
//防御卡的类 x是di y是wi
public class D{
// x = di y = wi
private int x,y;
D (int x,int y){
this.x = x;
this.y = y;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}
}
运行结果
1234
1243
1324
1342
2314
2341
3214
3241
3412
3421
4321
4312
可能的组合有4种
第1种 为:3412第2种 为:3421第3种 为:4321第4种 为:4312
Value = 12
结束
貌似测试了下应该是正确的
其实这个问题挺有意思的建议你不要看我的代码根据我的提示自己做次
为什么选择Java进行移动游戏开发
为什么选择Java进行移动游戏开发?
尽管C能够被编译成本机代码并且可以直接存取本机系统资源,以及与BREW(它允许开发者使用任何希望的语言,包括C,Java,XML和Flash)相结合为移动游戏开发者提供端到端的解决方案,但是Java仍然是进行移动游戏开发的最流行的选择。Java,或更精确的说是Java 2微型版本(J2ME)平台,被认为是开发移动游戏的最方便的语言。(要更多地了解J2ME,请参考"What is Java 2 Micro Edition?")。J2ME如此流行的背后动力包括:
J2ME遵循为大多数手持设备生产商所支持的工业标准,如今大多数的移动电话都支持Java开发。
J2ME是一个自由的和开放的平台。这使得开发人员投资很少,但却提供给他们必需的灵活性以及大量的支持。
它的高度可移植的特性("书写一次到处运行")保证一部为一个品牌/类型的手持设备开发的游戏应用程序,将可以工作在其它类型的支持Java的手持设备品牌/类型上。
它特别为小型设备进行了优化,是轻量级的,高度安全的,因为在其上开发的应用程序不能存取或者影响运行在该手持设备上的其它应用程序。
J2ME包含移动信息设备轮廓(MIDP)API,它的设计是为专门开发包括手机在内的移动设备应用程序,但切记它们的局限性和约束条件。而且,最新的MIDP 2.0版自己提供了一套完整的API以用于游戏开发,这使得游戏开发更为简单和快捷。
现在,我们探索一下MIDP 2.0在移动游戏开发环境中的使用。
三、 MIDP2.0在游戏开发中的地位
MIDP2.0 API是一组具有特别性能的API,可用于开发安全的,内容丰富的多媒体应用软件,包括适合于移动设备的游戏程序。MIDP 2.0基于以前的MIDP 1.0之上并提供一个更好的开发平台以创建高效快速的移动设备应用程序。
MIDP 2.0进一步提炼了MIDP 1.0的特性和有关功能。有关这些新特性的信息请参考What’s New in MIDP 2.0。新增添到MIDP上的重要特点之一是Game API,或更精确地说是javax..lci.game API包。通过该Game API,MIDP 2.0提供给游戏开发者现成的程序模块,这些模块在早期的MIDP 1.0时是你必须从头开始创建的。这些模块以类的形式提供,用于创建和控制各种游戏元素,如游戏画布、精灵、层等等(后文将介绍)。这样,MIDP 2.0大大减少了游戏开发者的创作时间。
进行游戏开发必需的另外两个MIDP 2.0 API包,在本文中也作了探索,它们是javax..midlet和javax..lci。
javax..midlet API包是开发各种类型的移动应用程序的基础。它包含javax..midlet.MIDlet类,它是所有的基于J2ME的移动应用软件(或称为midlet)的基类,它必须由所有移动应用程序的main类加以扩展后使用。非常类似于java.applet.Applet类,MIDlet类提供创建midlet程序的必要的资源。
javax..lci API包是开发各种类型的移动应用程序的用户接口所必需的。这个API提供类来创建和控制UI部件(例如屏幕,表单,文本框,单选按钮,等等)并且处理包括游戏在内的移动应用程序的输入。有使用AWT和SWING GUI开发经验的开发者会发现javax..lci包中的元素非常相似于这些API中的元素。
我将在本文的示例游戏开发期间讨论这些API中的和游戏开发相关的元素。
编译JAVA游戏,MIDlet出错,急求大家帮助
老实说我很失望,本以为什么可以作为前车之鉴的错误,没想到都是一些拼写错误,天,你不会是用记事本写的吧,这样的错误编译根本不会通过。
你可以用Eclipse来写啊,是免费的。
下面是改过的:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class SkeletonMIDlet extends MIDlet implements CommandListener // CommandListenner写错了,多写了个n
{
private SCanvas canvas;
public void startApp() // 这里void 写错了
{
if (canvas == null)
{
canvas = new SCanvas(Display.getDisplay(this)); // SCanvas 写错了,c 大写;
// Display.getDisplay(this);
// D大写
Command exitCommand = new Command("exit", Command.EXIT, 0);
canvas.addCommand(exitCommand);
canvas.setCommandListener(this);
}
canvas.start();
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable s)
{
if (c.getCommandType() == Command.EXIT) // Command 写错了,少写了个m
{
destroyApp(true);
notifyDestroyed();
}
}
}
import javax.microedition.lcdui.*;
public class SCanvas extends Canvas // 你这里写的extend 少写了个s
{
private Display display;
public SCanvas(Display d)
{
super();
display = d;
}
void start()
{
display.setCurrent(this);
repaint();
}
public void paint(Graphics g)
{
g.setColor(0, 0, 0);
g.fillRect(0, 0, getWidth(), getHeight()); // 这里错了: 少写了个0
g.setColor(255, 255, 255);
// 绘制手机屏幕尺寸
int y = 0;
String screenSize = "Screen size:" + Integer.toString(getWidth()) + "×"
+ Integer.toString(getHeight());// 这里你没有写分号 ;
g.drawString(screenSize, 0, y, Graphics.TOP | Graphics.LEFT);
}
}
为什么Java不适合游戏开发
作为一个多年游戏服务端开发者,我来回答一下这个问题。只要你仔细去招聘网站看,会发现游戏招java的非常少(我希望杠精不要抬杠,我说的少,而且非常少,并不是说没有)。那么为什么在其他领域的霸主在游戏行业连喝口汤的资格都没有呢?其实主要有两个原因,而且这两个原因都和程序员最关心的效率有关系,一个是开发效率,一个是运行效率。很遗憾的作为一个不上不下的java两个都占不了。
***隐藏网址***
其次再来说说运行效率,在一些密集型计算的游戏中,c++是首选,一些大型游戏,对计算要求很高,业务逻辑复杂的情况下,提升效率就能多容纳在线人数,也是成本的减少。同时对内存要求也高,使用c++可以数着内存写代码(手法过于夸张),对象啥时候申请,啥时候释放都是程序员说了算,gc消耗不存在的。而java生成的都是字节码,代码执行都要经过jvm来跑,这中间的消耗对于那些对性能要求苛刻的程序来说,绝对不能接受。
综合以上两点,java处于运行效率和开发效率中间的语言,在游戏这个行业自然是不会受到青睐。
做游戏引擎,当然还是看性能啦,c的性能最好。java性能其实也很好了,看谁出个简单快速的框架呗
JAVA可以做游戏服务端的开发,也就是网络游戏的开发,网络游戏的实时性高,对高并发,数据的一致性处理要求较高,并且因为是自身JVM的垃圾回收机制对服务器的内核性能要求高,会占用一定的资源去处理这部分数据,游戏的实时性代表了大量数据会经常被更改替换。
JAVA不是不能做,而是对开发人员的能力要求高!如果能够充分利用JAVA的并发优势,那是可以做到的,并且这已经被有些小公司当做网络游戏服务端的开发语言了。
PC端,移动端的单机游戏就不用再考虑JAVA了,显然JAVA的2D3D处理效果没有一些主流的游戏开发语言好!语言具有其使用场景,抓住其优点去利用之,而不是拿它的缺点如何别的语言优点相比!如今JAVA是做服务端开发的不二人选,因为他的帝国大厦已经很完善,开发人员也多!
因为java中间多出来一个jvm,效率低,游戏实时性很重要。
看一个语言适合开发什么,主要有三点
1.效率问题,包括开发效率和执行效率。
2.生态圈,有人家提供好的成套解决方案,为什么不用呢?
3.产品的侧重点。
就拿java和c++来说,java主要用于web开发,但是c++通过cgi也可以写web,而且c++的执行效率甩java几条街,但是为什么不用c++写web呢,因为c++的开发web的效率太低,而java有各种web方面的框架,开发效率高。
如果产品是游戏,游戏实时性很重要,你玩个游戏反应慢半拍那肯定很恼火。游戏这个产品的实时性就注定了要采用高效率的语言开发,那c,c++自然就跑不掉了。
Java何来不适合游戏开发一说的呢?
毕竟游戏有分类,而且游戏也分客户端,服务端
很多游戏的服务端就是Java的
而且实时性要求不高的游戏客户端,也可以用Java开发,例如我的世界
我想题主想问为什么3A大作没有用Java开发的吧
这其实是一个路径绑定问题,目前大作基本上都是用游戏引擎做的,而且这些游戏引擎都是发展多年的,如果用Java做,可能要用没经过业内验证的新东西,大公司不想冒险,还有Java的垃圾回收机制本身也是个难点,不适合做实时性非常强的游戏。
java开发游戏性能和效率差,开发一些小游戏还可以,java面向对象,所有方法都是封装在类里的,要调用方法就得实例类,而游戏主要侧重的是逻辑
对象就像是很多功能的机器,但是我的游戏逻辑只要每台机器的其中一个功能,但要用的话必须把这一整台机器制造出来。这就是面向对象的缺陷吧
而c是面向过程的可以更加灵活地设计过程逻辑,少去很多多余东西,大大提高性能
java的长处就是利用各种现存的类包,达到复用的效果,大大提高开发效率,
当然java也可以只针对逻辑来设计类,但那不是java的长处,没有多大的意义
百度搜索圈T社区()免费视频教程
如果你问我java适合开发游戏吗?我回答肯定是适合的,java开发效率高,运行效率一般,需要运行效率的地方用c或者cxx写就好了,现在市面大多数游戏都不是单一编程语言开发的,不需要在语言方面纠结太久。
很多人说,运行效率也很重要,但实际上,一般逻辑,你是感受不出差异的,普通逻辑使用java或者c#,或者脚本语言等这种开发效率,调试效率高的语言会让你开发更舒服。特别是脚本语言。
c和cxx只在特别需要效率的地方才使用。
哈_,这里子期!java开发游戏性能和效率差,开发一些小游戏还可以,远标老师讲过java面向对象,所有方法都是封装在类里的,要调用方法就得实例类,而游戏主要侧重的是逻辑
对象就像是很多功能的机器,但是我的游戏逻辑只要每台机器的其中一个功能,但要用的话必须把这一整台机器制造出来。这就是面向对象的缺陷吧
而c是面向过程的可以更加灵活地设计过程逻辑,少去很多多余东西,大大提高性能
java的长处就是利用各种现存的类包,达到复用的效果,大大提高开发效率,
当然java也可以只针对逻辑来设计类,但那不是java的长处,没有多大的意义
java小游戏为啥老错
出错的原因有很多:
1. 语法错误:Java是一种强类型语言,对语法要求比较严格,如果代码中有语法错误,就会导致程序无法编译通过。常见的语法错误包括拼写错误、错误的分号使用、括号不配对等。
2. 逻辑错误:逻辑错误表示程序的逻辑流程出现问题,导致程序运行结果不符合预期。常见的逻辑错误包括错误的条件判断、错误的循环逻辑、错误的变量使用等。
3. 空指针异常:在程序中使用了空对象,但没有进行判空处理,导致程序抛出空指针异常。需要注意在使用对象之前进行非空判断,以避免空指针异常的发生。
4. 数组越界异常:在程序中访问了数组中不存在的索引位置,导致程序抛出数组越界异常。需要注意数组的长度和索引的范围,避免访问超出数组范围的索引。
5. 输入输出错误:如果程序涉及到用户的输入或者文件的读写操作,在处理输入输出时可能出现错误,比如读取了不正确的输入、写入文件失败等。
6. 线程问题:如果程序中使用了多线程,可能会出现线程同步问题,导致程序出现错误。需要正确处理线程间的同步和互斥关系,避免竞态条件的发生。
开发Java小游戏时,应该注意以上问题,并进行适当的调试和测试,以排除错误并改进程序的逻辑和功能。
用JAVA编写一个完整的游戏程序
//打字游戏给你吧
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
class WordPanel extends JPanel implements Runnable{
private Thread thread = null;
private int level = 1;
private Font font = new Font("宋体",Font.ITALIC+Font.BOLD,24);
private Color color = Color.BLUE;
public static final int x = 10;
private int y = 0;
private char word;//下落的字母
private static Random rand = new Random();
public void setY(int y){
this.y = y;
}
public void setWord(char word){
this.word = word;
}
public char getWord(){
return this.word;
}
public static char newChar(){
return (char)(97+rand.nextInt(26));
}
public WordPanel(){
word = newChar();
thread = new Thread(this);
thread.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(font);
g.setColor(color);
g.drawString(String.valueOf(word),x,y);
}
public void run(){
while (true){
try {
Thread.sleep(1000);
this.repaint();
if (y》=this.getHeight()){
y = 0;
word = this.newChar();
}else
y+=20;
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
public class WordGame extends JFrame{
private WordPanel;
class Listener extends KeyAdapter{
public void keyTyped(KeyEvent e) {
char input = e.getKeyChar();
for (int i = 0; i《words.length; i++){
if ( input==words.getWord() ){
words.setWord(WordPanel.newChar());
words.setY(0);
words.repaint();
break;
}
}
}
}
public WordGame(String title){
super(title);
Container c = this.getContentPane();
c.setLayout(new GridLayout(1,words.length));
this.addKeyListener( new Listener() );
for (int i = 0; i《words.length; i++){
words = new WordPanel();
c.add(words);
}
this.setSize( new Dimension(400,400) );
this.setVisible(true);
}
public static void main(String args){
WordGame game = new WordGame("简单的打字游戏");
}
}

更多文章:
简易w3school教程网页面代码(想记一下网页制作的常用代码,不知道有哪些)
2025年12月2日 14:45
正则表达式匹配换行符和空格(为什么这个正则表达式不能匹配空格和换行)
2026年4月22日 13:30
js图片无缝滚动的原理(请问一下滚动的原理是什么,我有点晕乎乎的谁能给我解释详细一点感激不尽)
2026年4月24日 09:00
notnull参数的作用(SpringMVC注解中的这个@Resource和@Notnull各有什么用处啊能讲详细点么)
2026年1月12日 23:15
插入语句命令(VF中如果要在第3条记录之前插入新的记录,应怎样编写insert语句)
2026年8月24日 18:15
memcached性能(PHP中4个加速,缓存扩展的区别和选用建议)
2025年9月8日 08:45
national geographic(national geographic什么意思)
2026年1月16日 18:15














