Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
magicboy
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 25
#1

Сохранение и загрузка - Программирование Android

22.09.2015, 10:44. Просмотров 612. Ответов 23
Метки нет (Все метки)

Здравствуйте!

Я пишу игру на базе андроид.
Вот возникло несколько вопросов(прошу не троллить и не отправлять в гугл...я новичек в этой сфере):

1. Каким образом сделать автосохранение прогресса в игре, после каждого пройденного уровня.

2. Как создать меню выбора уровня типа как в игре "100 дверей", и чтобы второй уровень не был доступен, пока не пройдешь первый.

3. Интересуют подробности добавления сплэш-картинки при запуске игры

P.S.:
Язык: Java
Софт: Android Studio + AIDE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2015, 10:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сохранение и загрузка (Программирование Android):

Сохранение и загрузка файлов - Программирование Android
Стоит цель бекапа базы данных приложения с возможностью выбора местонахождения ,а потом загрузка в приложение. Существуют готовые костыли?

Добавить к программе след действия: Сохранение и загрузка информации в текст. файл. Сохранение и загрузка информации в типизированный файл. - Pascal
Помогите добавить к программе след действия: Сохранение и загрузка информации в текст. файл. Сохранение и загрузка информации в...

Выдает при запуске загрузка личных параметров и тут же сохранение параметров потом снова загрузка личных и снова сохранение - Windows XP
Поймал трояна. Того который винду блокирует (вымогатель).Полез помощи искать с другого компа посоветовали образ с антивирусов касперски и...

Сохранение и загрузка. - Pascal
Подскажите пожалуйста, как мне сделать сохранение и загрузку для процедуры, чтобы создавались новые файлы с разными данными: ...

Сохранение и загрузка - Delphi
Нужно сделать сохранение и загрузку в программе. Я ни как не пойму как это сделать. Прикладываю исходник программы

Сохранение и загрузка - C++/CLI WinForms
Всем, Привет! Такая проблема, есть пытаюсь сохранить график, имя.bmp (Пример),но не получается , а если быть точнее он сохраняет, но не...

23
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
22.09.2015, 11:01 #2
задавай вопросы конкретнее, потому что эти очень широкие и неопределенные
смахивает на "напишите за меня, я гуглить ничего не собираюсь"
0
RedGuy
1 / 2 / 0
Регистрация: 25.08.2015
Сообщений: 60
22.09.2015, 11:17 #3
magicboy, Ты основу уровня сделай хотя бы сделай,можно поискать в гугле авто сохранение(там этого очень много),и скажи переменные уровня,тогда и поможем
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.09.2015, 11:34 #4
Цитата Сообщение от magicboy Посмотреть сообщение
Как создать меню выбора уровня типа как в игре "100 дверей", и чтобы второй уровень не был доступен, пока не пройдешь первый.
Это ж элементарно, логика 5-го класса, if-else читали?
0
magicboy
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 25
22.09.2015, 11:38  [ТС] #5
Есть готовое меню, есть готовые уровни, мне нужно между ними сделать меню выбора уровня,. Но я знаю как каждой кнопке присвоить загрузку уровня, но я не знаю как сделать, чтоб загрузка второго уровня была недоступна, пока первый не пройдешь

Добавлено через 4 минуты
Это ж элементарно, логика 5-го класса, if-else читали?
Знаком с ними но как в реале осуществить, пока не представляю
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.09.2015, 11:45 #6
Цитата Сообщение от magicboy Посмотреть сообщение
Знаком с ними
это уже полдела)
После прохождения первого уровня метим его как пройденный (как метить это уже другой вопрос).
При отображении активити с уровнями, проверяем метки уровней, если 1-й уровень = true, то 2-й делаем visible.
1
magicboy
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 25
22.09.2015, 12:04  [ТС] #7
это уже полдела)
После прохождения первого уровня метим его как пройденный (как метить это уже другой вопрос).
При отображении активити с уровнями, проверяем метки уровней, если 1-й уровень = true, то 2-й делаем visible.
Вооот, уже хоть что-то...сейчас я поковыряюсь, попробую, и потом в этой теме отпишу результат
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.09.2015, 12:23 #8
Цитата Сообщение от magicboy Посмотреть сообщение
Я пишу игру на базе андроид.
Много уже написал?
0
magicboy
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 25
22.09.2015, 12:29  [ТС] #9
Много уже написал?
Меню и 6 черновых уровня
Игра в стиле лабиринта

Добавлено через 2 минуты
Сейчас занимаюсь именно оформлением и интерфейсом
0
YuraAAA
22.09.2015, 12:50
  #10

Не по теме:

magicboy, держите нас в курсе))

0
magicboy
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 25
22.09.2015, 13:56  [ТС] #11
Прошу прощения за мою глупость и необразованность...но все таки помогите с написанием кода:

Это класс в котором у меня прописаны события всех кнопок игры:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class MainActivity extends Activity implements OnClickListener
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
 
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);       
        setContentView(R.layout.menu);
        Music.initialize(this);
        Music.menuPlay();
    }
 
    public void onClick(View v)
    {
        switch (v.getId())
        {
            case R.id.menu_help:setContentView(R.layout.help);
                break;
            case R.id.menu_new:Music.menuPause();
                startActivity(new Intent(MainActivity.this, GameActivity.class));
                break;
            case R.id.button_back_menu1:setContentView(R.layout.menu);
                break;
            case R.id.menu_info:setContentView(R.layout.info);
                break;
            case R.id.menu_exit:setContentView(R.layout.exit);
                break;
            case R.id.exit_yes:finish();
                break;
            case R.id.exit_no:setContentView(R.layout.menu);
                break;
            case R.id.info_back:setContentView(R.layout.menu);
                break;
        }
    }
 
    public void onPause()
    {
        super.onPause();
        Music.menuPause();
    }
}
23 строка обработка нажатия кнопки "Игра"
Вместо нее я прописываю переход на меню выбора уровня:
Javascript
1
2
case R.id.menu_new:setContentView(R.layout.load_lvl_menu);
                break;

load_lvl_menu.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
 
    <Button
        android:layout_height="wrap_content"
        android:text="1"
        android:layout_width="wrap_content"
        android:id="@+id/loadlvl1"
        android:onClick="onClick"/>
 
    <Button
        android:layout_height="wrap_content"
        android:text="2"
        android:layout_width="wrap_content"
        android:id="@+id/loadlvl2"
        android:onClick="onClick"/>
 
    <Button
        android:layout_height="wrap_content"
        android:text="3"
        android:layout_width="wrap_content"
        android:id="@+id/loadlvl3"
        android:onClick="onClick"/>
 
    <Button
        android:layout_height="wrap_content"
        android:text="4"
        android:layout_width="wrap_content"
        android:id="@+id/loadlvl4"
        android:onClick="onClick"/>
 
    <Button
        android:layout_height="wrap_content"
        android:text="5"
        android:layout_width="wrap_content"
        android:id="@+id/loadlvl5"
        android:onClick="onClick"/>
 
    <Button
        android:layout_height="wrap_content"
        android:text="6"
        android:layout_width="wrap_content"
        android:id="@+id/loadlvl6"
        android:onClick="onClick"/>
 
</LinearLayout>
Упомянутый в предыдущем активити класс обработки самой игры:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class GameActivity extends Activity implements View.OnTouchListener
{
    private GameThread gt;
 
    public boolean onTouch(View p1, MotionEvent p2)
    {
        switch (p1.getId())
        {
            case R.id.l_rotor:if (p2.getActionMasked() == MotionEvent.ACTION_DOWN) gt.ship.leftOn();
                if (p2.getActionMasked() == MotionEvent.ACTION_UP) gt.ship.leftOff();
                break;
            case R.id.r_rotor:if (p2.getActionMasked() == MotionEvent.ACTION_DOWN) gt.ship.rightOn();
                if (p2.getActionMasked() == MotionEvent.ACTION_UP) gt.ship.rightOff();
                break;
        }
        return true;
    }
 
 
 
    public void onCreate(Bundle savedInstance)
    {
        super.onCreate(savedInstance);
 
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);       
        setContentView(R.layout.game);
        SurfaceView sw=(SurfaceView)findViewById(R.id.game_surface);
        gt = new GameThread(getResources(), getWindowManager().getDefaultDisplay(), sw);
        Button b1=(Button)findViewById(R.id.l_rotor);
        Button b2=(Button)findViewById(R.id.r_rotor);
        b1.setOnTouchListener(this);
        b2.setOnTouchListener(this);
    }
 
    public void onPause()
    {
        super.onPause();
        gt.stopGame();
        Music.menuPlay();
        finish();
    }
 
}
И классы прорисовки лвл и обработки лвл:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
public class Level
{
    private int level;
    private LayerTiles map;
    private LayerSprite zone;
    private int[] cells={
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1
    };
    private int[] cells2={
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1
    };
    private int[] cells3={
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,1,1,1,0,0,0,1,
        1,0,0,1,0,0,0,0,0,1,
        1,0,0,1,0,0,1,0,0,1,
        1,0,0,1,0,0,1,0,0,1,
        1,0,0,0,0,0,1,0,0,1,
        1,0,0,0,0,0,1,0,0,1,
        1,1,1,1,1,1,1,1,1,1
    };
    private int[] cells4={
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,0,0,1,1,1,0,0,0,1,
        1,0,0,1,0,0,0,0,0,1,
        1,0,1,1,0,0,1,1,0,1,
        1,0,0,1,0,0,1,0,0,1,
        1,0,0,1,0,0,1,0,0,1,
        1,0,0,1,0,0,1,0,0,1,
        1,1,1,1,1,1,1,1,1,1
    };
    private int[] cells5={
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,1,1,0,0,1,
        1,0,0,0,0,1,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1
    };
    private int[] cells6={
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,1,1,1,0,0,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,1,1,1,1,1,1,
        1,0,0,0,0,0,1,0,0,1,
        1,1,0,0,1,1,1,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1
    };
    
 
 
 
    private Display d;
 
    public Level(Resources res, Display d)
    {
        this.d = d;
        level = 1;
        map = new LayerTiles(res, new int[]{R.drawable.tile}, cells, 10, 10);
        zone = new LayerSprite(R.drawable.zone, res);
    }
 
    public boolean collidesWith(LayerSprite ls)
    {
        return map.collidesWith(ls);
    }
 
    public boolean collidesZone(LayerSprite ls)
    {
        return zone.collidesWith(ls);
    }
 
    public void setLevel1()
    {
        level = 1;
        map.setCells(cells);
        map.setPosition((d.getWidth() / 2) - 150, (d.getHeight() / 2) - 150);
        zone.setPosition((d.getWidth() / 2) + 665, (d.getHeight() / 2) + 600);
    }
 
    public void nextLevel()
    {
        level++;
        switch (level)
        {
            case 2:map.setCells(cells2);
                break;  
            case 3:map.setCells(cells3);
                break;  
            case 4:map.setCells(cells4);
                break;  
            case 5:map.setCells(cells5);
                break;  
            case 6:map.setCells(cells6);
                break;  
        }
        map.setPosition((d.getWidth() / 2) - 150, (d.getHeight() / 2) - 150);
        zone.setPosition((d.getWidth() / 2) + 665, (d.getHeight() / 2) + 600);
    }   
 
    public void resetLevel()
    {
        map.setPosition((d.getWidth() / 2) - 150, (d.getHeight() / 2) - 150);
        zone.setPosition((d.getWidth() / 2) + 665, (d.getHeight() / 2) + 600);  
    }   
 
    public int getLevel()
    {
        return level;
    }
 
    public void move(int dx, int dy)
    {
        map.move(dx, dy);
        zone.move(dx, dy);
    }
 
    public void paint(Canvas c)
    {
        map.paint(c);
        zone.paint(c);
    }
 
}

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
public class GameThread extends Thread implements SurfaceHolder.Callback
{
 
 
    private SurfaceHolder sh;
    private Level level;
    public Ship ship;
    private LayerSprite bg;
    private Display d;
    private boolean stopping;
 
    public GameThread(Resources res, Display d, SurfaceView sv)
    {
        this.d = d;
        level = new Level(res, d);
        ship = new Ship(res);
        bg = new LayerSprite(R.drawable.bggame, res);
        stopping = false;
        sv.getHolder().addCallback(this);
    }
 
    public void run()
    {
        level.setLevel1();
        ship.setPosition((d.getWidth() / 2) - 20, (d.getHeight() / 2) - 20);
        bg.move(-400, -200);
        while (!stopping)
        {
            try
            {
                Thread.sleep(30);
            }
            catch (Exception e)
            {}
            draw();
            update();
        }
        sh.removeCallback(this);
    }
 
    public void draw()
    {
        Canvas c=sh.lockCanvas();
        c.drawColor(Color.BLACK);
        bg.paint(c);
        level.paint(c);
        ship.paint(c);
        sh.unlockCanvasAndPost(c);
    }
 
    public void drawMessage(Canvas c, String message)
    {
        Paint p=new Paint();
        p.setColor(Color.WHITE);
        p.setTextSize(40);
        p.setTextAlign(Paint.Align.CENTER);
        c.drawText(message, d.getWidth() / 2, d.getHeight() / 2, p);
    }
 
    public void update()
    {
        ship.update();
        level.move(-(int)ship.getInertionX(), (int)ship.getInertionY());
//проверка столкновения с уровнем
        if (level.collidesWith(ship))
        {
            Music.explosePlay();
            level.resetLevel();
            ship.setPosition((d.getWidth() / 2) - 20, (d.getHeight() / 2) - 20);
            ship.resetInertionAll();
            Canvas c=sh.lockCanvas();
            drawMessage(c, "Разбился");
            sh.unlockCanvasAndPost(c);
            try
            {
                Thread.sleep(2000);
            }
            catch (Exception e)
            {}
        }
//проверка успешной стыковки
        if (level.collidesZone(ship))
        {
            level.nextLevel();
            ship.setPosition((d.getWidth() / 2) - 20, (d.getHeight() / 2) - 20);
            ship.resetInertionAll();    
            Canvas c=sh.lockCanvas();
            drawMessage(c, "Уровень " + (level.getLevel() - 1) + " пройден!");
            sh.unlockCanvasAndPost(c);
            try
            {
                Thread.sleep(2000);
            }
            catch (Exception e)
            {}
        }
//проверка прохождения 6 уровня
        if (level.getLevel() > 6)
        {
            Canvas c=sh.lockCanvas();
            drawMessage(c, "Игра пройдена!");
            sh.unlockCanvasAndPost(c);
            try
            {
                Thread.sleep(3000);
            }
            catch (Exception e)
            {}
            stopping = true;
        }
        if (level.getLevel() == 3) Music.menuPlay();
    }
 
 
 
    public void stopGame()
    {
        stopping = true;
    }
 
 
    public void surfaceCreated(SurfaceHolder sh)
    {
        this.sh = sh;
        start();
    }
 
    public void surfaceChanged(SurfaceHolder sh, int i1, int i2, int i3)
    {}
 
    public void surfaceDestroyed(SurfaceHolder sh)
    {}
 
 
 
}

Помогите с написанием кода...для меню выбора уровней
Еще раз прошу прощения за корявое изъяснение цели
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.09.2015, 14:24 #12
Чего то я не понял зачем на все кнопки вешать setContentView. Что это дает?
По существу задачи: в обработке нажатия кнопки "Игра" в цикле перебирать кнопки уровней и согласно метке делать их активными или нет.
Метку прохождения уровня сохраняйте в конце кода уровня, если он пройден само собой.
0
magicboy
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 25
22.09.2015, 14:53  [ТС] #13
Чего то я не понял зачем на все кнопки вешать setContentView. Что это дает?
Гугл мне подсказал так обрабатывать нажатие на кнопку
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
22.09.2015, 14:57 #14
Цитата Сообщение от magicboy Посмотреть сообщение
Гугл мне подсказал так обрабатывать нажатие на кнопку
Плохой у вас гугл) Не очень хорошо просто менять разметку в активити, когда по идее нужно перейти на другую.
0
magicboy
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 25
22.09.2015, 15:00  [ТС] #15
По существу задачи: в обработке нажатия кнопки "Игра" в цикле перебирать кнопки уровней и согласно метке делать их активными или нет.
Метку прохождения уровня сохраняйте в конце кода уровня, если он пройден само собой.
Если не затруднит, можете как пример прописать на одну кнопку, а дальше я уже сам, просто еще раз повторюсь...я новичек в этом, и все что я предоставил это заслуга гугла...просто переделывал на свой лад

Добавлено через 2 минуты
Плохой у вас гугл) Не очень хорошо просто менять разметку в активити, когда по идее нужно перейти на другую.
Вы имеете ввиду что нужно создать отдельное активити и в нем уже заниматься этим?
0
22.09.2015, 15:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2015, 15:00
Привет! Вот еще темы с ответами:

.NET 4.x Сохранение и загрузка - C#
Доброго времени суток! Возникла проблема, есть кородяво, но почти собственноручно написанное подобие телефонной книги. Я бы хотела...

Сохранение и загрузка форм - Delphi WinAPI
Здравствуйте! Использую такие функции для сохранения и загрузки форм: procedure SaveComponentToFile(Component: TComponent; const...

Сохранение и загрузка отчетов - C++ Builder БД
Всем доброго времени суток! Столкнулся с такой проблемой: Хочу сохранить отчет (сделан в системе QuickReport), а потом при надобности...

Сохранение и загрузка listView - C#
люди подскажите как сохранить и загрузить listView, если заранее не известно скок строк и колонок.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru