Java Android游戏高分实现

Java Android游戏高分实现,java,android,sqlite,opengl-es,Java,Android,Sqlite,Opengl Es,我正在为我最后一年的项目制作一个太空射击游戏,我认为在游戏中加入一个本地分数/高分屏幕会很酷。我不知道该怎么做,如果有人能给我指出正确的方向,我会非常感激。我在网上找到的所有例子对我来说都非常复杂。此外,我希望分数显示在游戏屏幕上,这是用opengl es呈现。 谢谢。好吧,用你们想要的任何格式(比如名字、分数、日期等)写一个高分的文件,以便以后更容易解析。然后,每次你想写一个新的分数时,都要继续编辑它。盲目地阅读并显示它。我经常在同一类型的项目中这样做,我做一个对象列表。这个物体代表一个高分。

我正在为我最后一年的项目制作一个太空射击游戏,我认为在游戏中加入一个本地分数/高分屏幕会很酷。我不知道该怎么做,如果有人能给我指出正确的方向,我会非常感激。我在网上找到的所有例子对我来说都非常复杂。此外,我希望分数显示在游戏屏幕上,这是用opengl es呈现。
谢谢。

好吧,用你们想要的任何格式(比如名字、分数、日期等)写一个高分的文件,以便以后更容易解析。然后,每次你想写一个新的分数时,都要继续编辑它。盲目地阅读并显示它。

我经常在同一类型的项目中这样做,我做一个对象列表。这个物体代表一个高分。如果我需要存储高分列表,我会序列化该列表,如果我需要显示它,我会反序列化该文件。

我刚刚为我目前正在开发的OpenGL ES游戏创建了一个高分板。因为这是你最后一年的项目,我不会把它当作一个粘贴箱,而是给你一些提示。在我的应用程序中,分数被发送到我的PHP脚本,该脚本将值存储在MySQL中

我用的是:
  • 新的班级,处理一切与高分有关的事情
  • AlertDialog“alertName”-询问玩家姓名
  • 使用alertName.setView(输入)将EditText“输入”添加到对话框中
  • 使用异步任务将分数提交到服务器
    • 可以用其他选项(内部、外部或SQLlite db)替换此选项
当游戏结束时(所有生命都消失了,计时器启动了,等等),我使用一行代码,与此不太相似:

HighScore hs = new HighScore(context, score, level);
for(int i=0; i<highscores.size(); i++){
    text.drawText(gl, highscore.get(i).toString());
    gl.glTranslatef(0f, -0.8f, 0f);
}
上下文是必需的,因此可以创建AlertDialogs和Toast。构造函数调用函数submit(),该函数显示AlertDialog,询问玩家名称,然后将数据发送到服务器

我的类包含这行代码,让玩家知道在收到服务器的响应后他们是否达到了前100名:

Toast.makeText(mContext, "You didn't make the score board", 
        Toast.LENGTH_SHORT).show();
高分列表存储在ArrayList中

private ArrayList<String> highscores = new ArrayList<String>();
class SubmitAsync extends AsyncTask<String, Void, Void>{
    @Override
    protected Void doInBackground(String... params){
        HttpPost postMethod = new HttpPost("http://address-of-script.php");
        postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        response = client.execute(postMethod, responseHandler);
        JSONArray jsonArray  = new JSONArray(response);
        for(int i=0; i<jsonArray.length(); i++){
            JSONObject j = jsonArray.getJSONObject(i);
            String name = String.format("%11s", j.get("name"));
            String score = String.format("%10s", j.get("score"));
            highscores.add(name + score);
        }
    }
}
然后: 在渲染器的onDrawFrame中,您可以构建highscore类,这样您就可以调用下面的一行代码,其中包含您的翻译、缩放pushMatrix和popMatrix调用,以将highscore数据绘制到屏幕上

hs.draw(gl);
其中包含一个循环,与此类似:

HighScore hs = new HighScore(context, score, level);
for(int i=0; i<highscores.size(); i++){
    text.drawText(gl, highscore.get(i).toString());
    gl.glTranslatef(0f, -0.8f, 0f);
}
应该注意,$db对象是一个小类,我用来包装PDO方法prepare和execute,它以关联数组的形式返回结果

高分Android类: 同样,我不会复制/粘贴,但这将说明如何将数据发布到服务器,接收JSON字符串,然后填充字符串并将其添加到highscores ArrayList。下面的代码是HighScore类的构造函数,它要求用户输入

List<NameValuePair>nameValuePairs = new ArraList<NameValuePair>(2);
AlertDialog alertName;
DefaultHttpClient client = new DefaultHttpClient();
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = "";

HighScore(Context context, int score){
    nameValuePairs.add(new BasicNameValuePair("score", + score.toString()));
    alertName = new AlertDialog(context).create();
    EditText input = new EditText(context);
    alertName.setTitle('Enter Your Name');
    alertName.setButton(AlertDialog.BUTTON_POSITIVE, "OK", 
        new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){
                nameValuePairs.add(
                new BasicNameValuePair("name", input.getText().toString())
                );
                SubmitAsync sa = new SubmitAsync();
                sa.execute();
            }
    });
    alertName.show();
}
ListnameValuePairs=新数组列表(2);
AlertDialog alertName;
DefaultHttpClient=新的DefaultHttpClient();
ResponseHandler ResponseHandler=新BasicResponseHandler();
字符串响应=”;
高分(上下文、整数分数){
添加(新的BasicNameValuePair(“score”、+score.toString());
alertName=新建AlertDialog(上下文).create();
EditText输入=新的EditText(上下文);
alertName.setTitle(“输入您的姓名”);
alertName.setButton(AlertDialog.BUTTON)_“确定”,
新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
nameValuePairs.add(
新的BasicNameValuePair(“name”,input.getText().toString())
);
SubmitAsync sa=新的SubmitAsync();
sa.execute();
}
});
alertName.show();
}
SubmitAsync类是HighScore类的一个子类,它将设置http客户端来发送数据,并添加接收到的数据。数据被消化为JSON,字符串被填充,如前所述,然后添加到highscore ArrayList中

private ArrayList<String> highscores = new ArrayList<String>();
class SubmitAsync extends AsyncTask<String, Void, Void>{
    @Override
    protected Void doInBackground(String... params){
        HttpPost postMethod = new HttpPost("http://address-of-script.php");
        postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        response = client.execute(postMethod, responseHandler);
        JSONArray jsonArray  = new JSONArray(response);
        for(int i=0; i<jsonArray.length(); i++){
            JSONObject j = jsonArray.getJSONObject(i);
            String name = String.format("%11s", j.get("name"));
            String score = String.format("%10s", j.get("score"));
            highscores.add(name + score);
        }
    }
}
类SubmitAsync扩展异步任务{
@凌驾
受保护的Void doInBackground(字符串…参数){
HttpPost postMethod=新的HttpPost(“http://address-of-script.php");
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
response=client.execute(postMethod,responseHandler);
JSONArray JSONArray=新JSONArray(响应);

对于(int i=0;iThanks TerryProbert,这正是我想要的,但如何将分数发送到php脚本?我不介意查看您的高分代码以获得指导;我将相应地引用您。再次感谢。@MichaelSeunAraromi如果您对php/MySQL没有事先的了解,那么学习可能会影响您的项目足够让它工作。另外,你的游戏也需要一个服务器端组件。听起来你应该查看本地存储选项,然后使用TerryProbert的指导创建高分屏幕。我同意你的观点@Dan,尽管我正在用一个非常精简的wha版本更新我的帖子遗憾的是,使用JSONObject的服务器响应和本地存储/SQLite之间的原理不一样