rapid-router 5.18.0__py2.py3-none-any.whl → 7.6.8__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- example_project/rapid_router_test_settings.py +19 -7
- example_project/settings.py +21 -8
- example_project/urls.py +5 -6
- game/__init__.py +1 -1
- game/admin.py +7 -2
- game/character.py +8 -0
- game/decor.py +40 -0
- game/end_to_end_tests/base_game_test.py +34 -27
- game/end_to_end_tests/editor_page.py +15 -0
- game/end_to_end_tests/game_page.py +88 -20
- game/end_to_end_tests/selenium_test_case.py +1 -20
- game/end_to_end_tests/test_cow_crashes.py +3 -5
- game/end_to_end_tests/test_level_editor.py +273 -10
- game/end_to_end_tests/test_level_selection.py +25 -3
- game/end_to_end_tests/test_play_through.py +222 -127
- game/end_to_end_tests/test_python_levels.py +41 -7
- game/end_to_end_tests/test_saving_workspace.py +2 -1
- game/forms.py +7 -1
- game/level_management.py +26 -11
- game/messages.py +899 -337
- game/migrations/0001_squashed_0025_levels_ordering_pt1.py +19 -1
- game/migrations/0026_levels_pt2.py +13 -2
- game/migrations/0032_cannot_turn_left_level.py +13 -2
- game/migrations/0033_recursion_level.py +13 -2
- game/migrations/0034_joes_level.py +13 -2
- game/migrations/0035_disable_route_score_level_70.py +0 -2
- game/migrations/0036_level_score_73.py +0 -2
- game/migrations/0037_level_score_79.py +0 -2
- game/migrations/0038_level_score_40.py +0 -1
- game/migrations/0042_level_score_73.py +0 -2
- game/migrations/0048_add_cow_field_and_blocks.py +0 -2
- game/migrations/0049_level_score_34.py +0 -2
- game/migrations/0050_level_score_40.py +0 -2
- game/migrations/0051_level_score_49.py +0 -1
- game/migrations/0086_loop_levels.py +13 -2
- game/migrations/0092_disable_algo_score_in_custom_levels.py +28 -0
- game/migrations/0093_alter_level_character_name.py +18 -0
- game/migrations/0094_add_hint_lesson_subtitle_to_levels.py +28 -0
- game/migrations/0095_level_commands.py +18 -0
- game/migrations/0096_alter_level_commands.py +18 -0
- game/migrations/0097_add_python_den_levels.py +1515 -0
- game/migrations/0098_add_episode_link_fields.py +44 -0
- game/migrations/0099_python_episodes_links.py +103 -0
- game/migrations/0100_reorder_python_levels.py +179 -0
- game/migrations/0101_rename_episodes.py +45 -0
- game/migrations/0102_reoder_episodes_13_14.py +136 -0
- game/migrations/0103_level_1015_solution.py +26 -0
- game/migrations/0104_remove_level_direct_drive.py +17 -0
- game/migrations/0105_delete_invalid_attempts.py +18 -0
- game/migrations/0106_fields_to_snake_case.py +48 -0
- game/migrations/0107_rename_worksheet_link_episode_student_worksheet_link.py +18 -0
- game/migrations/0108_episode_indy_worksheet_link.py +18 -0
- game/migrations/0109_create_episodes_23_and_24.py +99 -0
- game/migrations/0110_remove_episode_indy_worksheet_link_and_more.py +100 -0
- game/migrations/0111_create_worksheets.py +149 -0
- game/migrations/0112_worksheet_locked_classes.py +21 -0
- game/migrations/0113_level_needs_approval.py +18 -0
- game/migrations/0114_default_and_non_student_levels_no_approval.py +31 -0
- game/migrations/0115_level_level__default_does_not_need_approval.py +22 -0
- game/migrations/0116_update_worksheet_video_links.py +68 -0
- game/migrations/0117_update_solutions_to_if_else.py +61 -0
- game/models.py +127 -17
- game/permissions.py +51 -19
- game/python_den_urls.py +26 -0
- game/random_road.py +9 -9
- game/serializers.py +12 -17
- game/static/django_reverse_js/js/reverse.js +171 -0
- game/static/game/css/LilitaOne-Regular.ttf +0 -0
- game/static/game/css/backgrounds.css +8 -12
- game/static/game/css/dataTables.custom.css +3 -2
- game/static/game/css/editor.css +47 -0
- game/static/game/css/game.css +37 -43
- game/static/game/css/game_screen.css +16 -0
- game/static/game/css/level_editor.css +5 -0
- game/static/game/css/level_selection.css +17 -2
- game/static/game/image/Python_Den_hero_student.png +0 -0
- game/static/game/image/Python_levels_page.svg +1954 -0
- game/static/game/image/characters/front_view/Electric_van.svg +448 -0
- game/static/game/image/characters/top_view/Electric_van.svg +448 -0
- game/static/game/image/decor/city/solar_panel.svg +1200 -0
- game/static/game/image/decor/farm/solar_panel.svg +86 -0
- game/static/game/image/decor/grass/solar_panel.svg +86 -0
- game/static/game/image/decor/snow/solar_panel.svg +173 -0
- game/static/game/image/electric_van.svg +448 -0
- game/static/game/image/icons/description.svg +1 -0
- game/static/game/image/icons/hint.svg +1 -0
- game/static/game/image/icons/python.svg +1 -1
- game/static/game/image/pigeon.svg +684 -0
- game/static/game/image/python_den_header.svg +19 -0
- game/static/game/js/animation.js +65 -24
- game/static/game/js/blockly/msg/js/bg.js +52 -1
- game/static/game/js/blockly/msg/js/ca.js +52 -1
- game/static/game/js/blockly/msg/js/en-gb.js +2 -0
- game/static/game/js/blockly/msg/js/en.js +2 -0
- game/static/game/js/blockly/msg/js/es.js +52 -1
- game/static/game/js/blockly/msg/js/fr.js +2 -0
- game/static/game/js/blockly/msg/js/hi.js +2 -0
- game/static/game/js/blockly/msg/js/it.js +52 -1
- game/static/game/js/blockly/msg/js/pl.js +52 -1
- game/static/game/js/blockly/msg/js/pt-br.js +52 -1
- game/static/game/js/blockly/msg/js/ru.js +52 -1
- game/static/game/js/blockly/msg/js/ur.js +52 -1
- game/static/game/js/blocklyCustomBlocks.js +93 -52
- game/static/game/js/button.js +12 -0
- game/static/game/js/cow.js +11 -7
- game/static/game/js/drawing.js +68 -29
- game/static/game/js/editor.js +23 -0
- game/static/game/js/game.js +74 -110
- game/static/game/js/level_editor.js +646 -274
- game/static/game/js/level_moderation.js +33 -2
- game/static/game/js/level_selection.js +1 -1
- game/static/game/js/loadLanguages.js +2 -2
- game/static/game/js/model.js +32 -2
- game/static/game/js/pythonControl.js +14 -1
- game/static/game/js/scoreboard.js +0 -37
- game/static/game/js/scoreboardSharedLevels.js +48 -0
- game/static/game/js/skulpt/skulpt-stdlib.js +1 -1
- game/static/game/js/sound.js +52 -5
- game/static/game/raphael_image/characters/top_view/Electric_van.svg +448 -0
- game/static/game/raphael_image/decor/city/solar_panel.svg +1200 -0
- game/static/game/raphael_image/decor/farm/solar_panel.svg +86 -0
- game/static/game/raphael_image/decor/grass/solar_panel.svg +86 -0
- game/static/game/raphael_image/decor/snow/solar_panel.svg +173 -0
- game/static/game/raphael_image/pigeon.svg +685 -0
- game/static/game/sass/game.scss +2 -2
- game/static/game/sound/clown_horn.mp3 +0 -0
- game/static/game/sound/clown_horn.ogg +0 -0
- game/static/game/sound/electric_van_starting.mp3 +0 -0
- game/static/game/sound/electric_van_starting.ogg +0 -0
- game/static/game/sound/pigeon.mp3 +0 -0
- game/static/game/sound/pigeon.ogg +0 -0
- game/static/game/sound/sleigh_bells.mp3 +0 -0
- game/static/game/sound/sleigh_bells.ogg +0 -0
- game/static/game/sound/sleigh_crash.mp3 +0 -0
- game/static/game/sound/sleigh_crash.ogg +0 -0
- game/templates/game/base.html +34 -14
- game/templates/game/basenonav.html +11 -5
- game/templates/game/game.html +142 -38
- game/templates/game/level_editor.html +340 -236
- game/templates/game/level_moderation.html +19 -6
- game/templates/game/level_selection.html +18 -110
- game/templates/game/python_den_level_selection.html +291 -0
- game/templates/game/python_den_worksheet.html +101 -0
- game/templates/game/scoreboard.html +83 -64
- game/tests/test_level_editor.py +94 -26
- game/tests/test_level_selection.py +149 -46
- game/tests/test_python_den_worksheet.py +85 -0
- game/tests/test_scoreboard.py +34 -7
- game/tests/utils/level.py +32 -26
- game/theme.py +5 -5
- game/urls.py +199 -61
- game/views/language_code_conversions.py +86 -86
- game/views/level.py +155 -63
- game/views/level_editor.py +88 -55
- game/views/level_moderation.py +23 -0
- game/views/level_selection.py +116 -47
- game/views/level_solutions.py +491 -106
- game/views/scoreboard.py +76 -51
- game/views/worksheet.py +25 -0
- rapid_router-7.6.8.dist-info/METADATA +174 -0
- {rapid_router-5.18.0.dist-info → rapid_router-7.6.8.dist-info}/RECORD +164 -104
- {rapid_router-5.18.0.dist-info → rapid_router-7.6.8.dist-info}/WHEEL +1 -1
- example_project/manage.py +0 -10
- game/static/game/image/actions/go.svg +0 -18
- game/static/game/js/js-reverse.js +0 -14
- game/static/game/js/pqselect.min.js +0 -9
- game/static/game/js/widget-scroller.js +0 -906
- rapid_router-5.18.0.dist-info/METADATA +0 -17
- {rapid_router-5.18.0.dist-info → rapid_router-7.6.8.dist-info/licenses}/LICENSE.md +0 -0
- {rapid_router-5.18.0.dist-info → rapid_router-7.6.8.dist-info}/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ from builtins import range
|
|
|
4
4
|
from django.db import models, migrations
|
|
5
5
|
from django.conf import settings
|
|
6
6
|
import json
|
|
7
|
-
from game.level_management import
|
|
7
|
+
from game.level_management import set_blocks_inner
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
# Functions from the following migrations need manual copying.
|
|
@@ -2527,6 +2527,21 @@ def delete_old_limit_level(apps, schema_editor):
|
|
|
2527
2527
|
old_limit_level.delete()
|
|
2528
2528
|
|
|
2529
2529
|
|
|
2530
|
+
def set_decor_inner(level, decor, LevelDecor):
|
|
2531
|
+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
|
|
2532
|
+
LevelDecor.objects.filter(level=level).delete()
|
|
2533
|
+
|
|
2534
|
+
level_decors = []
|
|
2535
|
+
for data in decor:
|
|
2536
|
+
level_decors.append(
|
|
2537
|
+
LevelDecor(
|
|
2538
|
+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
|
|
2539
|
+
"decorName"]
|
|
2540
|
+
)
|
|
2541
|
+
)
|
|
2542
|
+
LevelDecor.objects.bulk_create(level_decors)
|
|
2543
|
+
|
|
2544
|
+
|
|
2530
2545
|
# Add episode 7 to 9
|
|
2531
2546
|
# Add levels 62, 51, 59, 57, 60, 61, 70
|
|
2532
2547
|
def add_episode_7_to_9(apps, schema_editor):
|
|
@@ -2874,6 +2889,7 @@ def add_episode_7_to_9(apps, schema_editor):
|
|
|
2874
2889
|
level59.save()
|
|
2875
2890
|
|
|
2876
2891
|
episode9 = Episode(
|
|
2892
|
+
pk=9,
|
|
2877
2893
|
name="Blockly Brain Teasers",
|
|
2878
2894
|
first_level=level68,
|
|
2879
2895
|
r_branchiness=0.5,
|
|
@@ -3555,6 +3571,7 @@ def add_levels_80_to_107(apps, schema_editor):
|
|
|
3555
3571
|
count += 1
|
|
3556
3572
|
|
|
3557
3573
|
blocklyAndPythonEpisode = Episode(
|
|
3574
|
+
pk=10,
|
|
3558
3575
|
name="Introduction to Python",
|
|
3559
3576
|
first_level=level80,
|
|
3560
3577
|
r_branchiness=0.5,
|
|
@@ -3569,6 +3586,7 @@ def add_levels_80_to_107(apps, schema_editor):
|
|
|
3569
3586
|
blocklyAndPythonEpisode.save()
|
|
3570
3587
|
|
|
3571
3588
|
pythonOnlyEpisode = Episode(
|
|
3589
|
+
pk=11,
|
|
3572
3590
|
name="Python",
|
|
3573
3591
|
first_level=level100,
|
|
3574
3592
|
r_branchiness=0.5,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import unicode_literals
|
|
2
2
|
|
|
3
3
|
from django.db import migrations
|
|
4
|
-
from game.level_management import
|
|
4
|
+
from game.level_management import set_blocks_inner
|
|
5
5
|
import json
|
|
6
6
|
|
|
7
7
|
|
|
@@ -13,7 +13,18 @@ def change_levels(apps, schema_editor):
|
|
|
13
13
|
Block = apps.get_model("game", "Block")
|
|
14
14
|
|
|
15
15
|
def set_decor(level, decor):
|
|
16
|
-
|
|
16
|
+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
|
|
17
|
+
LevelDecor.objects.filter(level=level).delete()
|
|
18
|
+
|
|
19
|
+
level_decors = []
|
|
20
|
+
for data in decor:
|
|
21
|
+
level_decors.append(
|
|
22
|
+
LevelDecor(
|
|
23
|
+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
|
|
24
|
+
"decorName"]
|
|
25
|
+
)
|
|
26
|
+
)
|
|
27
|
+
LevelDecor.objects.bulk_create(level_decors)
|
|
17
28
|
|
|
18
29
|
def set_blocks(level, blocks):
|
|
19
30
|
set_blocks_inner(level, blocks, LevelBlock, Block)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.db import migrations
|
|
2
|
-
from game.level_management import
|
|
2
|
+
from game.level_management import set_blocks_inner
|
|
3
3
|
import json
|
|
4
4
|
|
|
5
5
|
|
|
@@ -12,7 +12,18 @@ def new_level(apps, schema_editor):
|
|
|
12
12
|
Block = apps.get_model("game", "Block")
|
|
13
13
|
|
|
14
14
|
def set_decor(level, decor):
|
|
15
|
-
|
|
15
|
+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
|
|
16
|
+
LevelDecor.objects.filter(level=level).delete()
|
|
17
|
+
|
|
18
|
+
level_decors = []
|
|
19
|
+
for data in decor:
|
|
20
|
+
level_decors.append(
|
|
21
|
+
LevelDecor(
|
|
22
|
+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
|
|
23
|
+
"decorName"]
|
|
24
|
+
)
|
|
25
|
+
)
|
|
26
|
+
LevelDecor.objects.bulk_create(level_decors)
|
|
16
27
|
|
|
17
28
|
def set_blocks(level, blocks):
|
|
18
29
|
set_blocks_inner(level, blocks, LevelBlock, Block)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.db import migrations
|
|
2
|
-
from game.level_management import
|
|
2
|
+
from game.level_management import set_blocks_inner
|
|
3
3
|
import json
|
|
4
4
|
|
|
5
5
|
|
|
@@ -15,7 +15,18 @@ def new_level(apps, schema_editor):
|
|
|
15
15
|
Block = apps.get_model("game", "Block")
|
|
16
16
|
|
|
17
17
|
def set_decor(level, decor):
|
|
18
|
-
|
|
18
|
+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
|
|
19
|
+
LevelDecor.objects.filter(level=level).delete()
|
|
20
|
+
|
|
21
|
+
level_decors = []
|
|
22
|
+
for data in decor:
|
|
23
|
+
level_decors.append(
|
|
24
|
+
LevelDecor(
|
|
25
|
+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
|
|
26
|
+
"decorName"]
|
|
27
|
+
)
|
|
28
|
+
)
|
|
29
|
+
LevelDecor.objects.bulk_create(level_decors)
|
|
19
30
|
|
|
20
31
|
def set_blocks(level, blocks):
|
|
21
32
|
set_blocks_inner(level, blocks, LevelBlock, Block)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.db import migrations
|
|
2
|
-
from game.level_management import
|
|
2
|
+
from game.level_management import set_blocks_inner
|
|
3
3
|
import json
|
|
4
4
|
|
|
5
5
|
|
|
@@ -12,7 +12,18 @@ def new_level(apps, schema_editor):
|
|
|
12
12
|
Block = apps.get_model("game", "Block")
|
|
13
13
|
|
|
14
14
|
def set_decor(level, decor):
|
|
15
|
-
|
|
15
|
+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
|
|
16
|
+
LevelDecor.objects.filter(level=level).delete()
|
|
17
|
+
|
|
18
|
+
level_decors = []
|
|
19
|
+
for data in decor:
|
|
20
|
+
level_decors.append(
|
|
21
|
+
LevelDecor(
|
|
22
|
+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
|
|
23
|
+
"decorName"]
|
|
24
|
+
)
|
|
25
|
+
)
|
|
26
|
+
LevelDecor.objects.bulk_create(level_decors)
|
|
16
27
|
|
|
17
28
|
def set_blocks(level, blocks):
|
|
18
29
|
set_blocks_inner(level, blocks, LevelBlock, Block)
|
|
@@ -3,7 +3,7 @@ import json
|
|
|
3
3
|
from django.apps.registry import Apps
|
|
4
4
|
from django.db import migrations
|
|
5
5
|
|
|
6
|
-
from game.level_management import
|
|
6
|
+
from game.level_management import set_blocks_inner
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def add_loop_levels(apps: Apps, *args):
|
|
@@ -365,7 +365,18 @@ def add_loop_levels(apps: Apps, *args):
|
|
|
365
365
|
)
|
|
366
366
|
|
|
367
367
|
def set_decor(level, decor):
|
|
368
|
-
|
|
368
|
+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
|
|
369
|
+
LevelDecor.objects.filter(level=level).delete()
|
|
370
|
+
|
|
371
|
+
level_decors = []
|
|
372
|
+
for data in decor:
|
|
373
|
+
level_decors.append(
|
|
374
|
+
LevelDecor(
|
|
375
|
+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
|
|
376
|
+
"decorName"]
|
|
377
|
+
)
|
|
378
|
+
)
|
|
379
|
+
LevelDecor.objects.bulk_create(level_decors)
|
|
369
380
|
|
|
370
381
|
set_decor(
|
|
371
382
|
level_110,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from django.apps.registry import Apps
|
|
2
|
+
from django.db import migrations
|
|
3
|
+
|
|
4
|
+
def disable_algo_score_for_existing_custom_levels(apps: Apps, *args):
|
|
5
|
+
Level = apps.get_model("game", "Level")
|
|
6
|
+
|
|
7
|
+
Level.objects.filter(
|
|
8
|
+
default=False
|
|
9
|
+
).update(disable_algorithm_score=True)
|
|
10
|
+
|
|
11
|
+
def enable_algo_score_for_existing_custom_levels(apps: Apps, *args):
|
|
12
|
+
Level = apps.get_model("game", "Level")
|
|
13
|
+
|
|
14
|
+
Level.objects.filter(
|
|
15
|
+
default=False
|
|
16
|
+
).update(disable_algorithm_score=False)
|
|
17
|
+
|
|
18
|
+
class Migration(migrations.Migration):
|
|
19
|
+
dependencies = [
|
|
20
|
+
("game", "0091_disable_algo_score_if_no_model_solution")
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
operations = [
|
|
24
|
+
migrations.RunPython(
|
|
25
|
+
disable_algo_score_for_existing_custom_levels,
|
|
26
|
+
reverse_code=enable_algo_score_for_existing_custom_levels
|
|
27
|
+
)
|
|
28
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Generated by Django 3.2.25 on 2024-06-11 14:34
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('game', '0092_disable_algo_score_in_custom_levels'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AlterField(
|
|
14
|
+
model_name='level',
|
|
15
|
+
name='character_name',
|
|
16
|
+
field=models.CharField(blank=True, choices=[('Van', 'Van'), ('Dee', 'Dee'), ('Nigel', 'Nigel'), ('Kirsty', 'Kirsty'), ('Wes', 'Wes'), ('Phil', 'Phil'), ('Electric van', 'Electric van')], default=None, max_length=20, null=True),
|
|
17
|
+
),
|
|
18
|
+
]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Generated by Django 3.2.25 on 2024-06-24 12:50
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('game', '0093_alter_level_character_name'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name='level',
|
|
15
|
+
name='hint',
|
|
16
|
+
field=models.TextField(default='Think back to earlier levels. What did you learn?', max_length=10000),
|
|
17
|
+
),
|
|
18
|
+
migrations.AddField(
|
|
19
|
+
model_name='level',
|
|
20
|
+
name='lesson',
|
|
21
|
+
field=models.TextField(default='Can you find the shortest route?', max_length=10000),
|
|
22
|
+
),
|
|
23
|
+
migrations.AddField(
|
|
24
|
+
model_name='level',
|
|
25
|
+
name='subtitle',
|
|
26
|
+
field=models.TextField(blank=True, max_length=100, null=True),
|
|
27
|
+
),
|
|
28
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Generated by Django 3.2.25 on 2024-07-29 13:37
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('game', '0094_add_hint_lesson_subtitle_to_levels'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name='level',
|
|
15
|
+
name='commands',
|
|
16
|
+
field=models.TextField(default='<div class="row"><div class="large-4 columns"><p><b>Movement</b><br>my_van.move_forwards()<br>my_van.turn_around()<br>my_van.turn_left()<br>my_van.turn_right()<br>my_van.wait()<p></div><div class="large-4 columns"><p><b>Position</b><br>my_van.at_dead_end()<br>my_van.at_destination()<br>my_van.at_red_traffic_light()<br>my_van.at_green_traffic_light()<br>my_van.at_traffic_light(c)<br><i>where c is \'RED\' or \'GREEN\'</i></p></div><div class="large-4 columns"><p><br>my_van.is_road_right()<br>my_van.is_road_left()<br>my_van.is_road_forward()<br>my_van.is_road(d)<br><i>where d is \'FORWARD\', \'LEFT\', or \'RIGHT\'</i></p></div></div>', max_length=10000),
|
|
17
|
+
),
|
|
18
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Generated by Django 3.2.25 on 2024-07-30 10:49
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('game', '0095_level_commands'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AlterField(
|
|
14
|
+
model_name='level',
|
|
15
|
+
name='commands',
|
|
16
|
+
field=models.TextField(default='<div class="row"><div class="large-4 columns"><p><b>Movement</b><br>my_van.move_forwards()<br>my_van.turn_around()<br>my_van.turn_left()<br>my_van.turn_right()<br>my_van.wait()<p></div><div class="large-4 columns"><p><b>Position</b><br>my_van.at_dead_end()<br>my_van.at_destination()<br>my_van.at_red_traffic_light()<br>my_van.at_green_traffic_light()<br>my_van.at_traffic_light(c)<br><i>where c is \'RED\' or \'GREEN\'</i></p></div><div class="large-4 columns"><p><br>my_van.is_road_right()<br>my_van.is_road_left()<br>my_van.is_road_forward()<br>my_van.is_road(d)<br><i>where d is \'FORWARD\', \'LEFT\', or \'RIGHT\'</i></p></div></div><div class="row"><div class="large-4 columns"><p><b>Animals</b><br>my_van.is_animal_crossing()<br>my_van.sound_horn()</div></div>', max_length=10000),
|
|
17
|
+
),
|
|
18
|
+
]
|