M9: navigeringslägen, linjenät och terminal
All checks were successful
release / build-release (push) Successful in 1m34s

internal/nav med resources/data/network.json (76 stationer, 11 linjer,
Yamanote som ringlinje). Tåg bedöms från lineId + terminus mot banans
station/to: rätt, fel håll, för långt bort (fler än 12 stationer) eller
ingen trafik; correct räknas ut för nätkopplade banor, 1-4 rätta tåg.
Tågresan visar linjens riktiga stationer. Nya förlustorsaker "Fel håll"
och "För långt bort". Listläge (nästa tåg nere till vänster) och
skyltläge (+50 % poäng) växlas med N på bankartan och sparas; -mode.
Terminalen: biljettautomaten visar linjetavlan på nätbanor. Perronger
P p Q q R r. Bana 006 Ikebukuro med fyra perronger. Banorna 001-005
kopplade till nätet. Skript: waitover och pick calm; poängraden
radbryts; skärmdumpar uppdaterade.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 13:07:36 +02:00
parent de61568e44
commit f762f9554e
53 changed files with 3041 additions and 122 deletions

View File

@@ -49,13 +49,14 @@
"romaji": "Shinjuku",
"en": "Shinjuku"
},
"correct": true,
"track": "2",
"schedule": {
"offsetSec": 0,
"intervalSec": 30,
"dwellSec": 12
}
},
"lineId": "narita-express",
"terminus": "shinjuku"
},
{
"platform": "p",
@@ -69,13 +70,14 @@
"romaji": "Keisei-Ueno",
"en": "Keisei-Ueno"
},
"correct": false,
"track": "1",
"schedule": {
"offsetSec": 8,
"intervalSec": 30,
"dwellSec": 12
}
},
"lineId": "keisei-main",
"terminus": "keisei-ueno"
}
],
"signs": [
@@ -97,5 +99,7 @@
"ja": "改札 ← 1番線 京成線 京成上野方面 → 2番線 成田エクスプレス 新宿方面"
}
}
]
],
"station": "narita-airport",
"to": "shinjuku"
}

View File

@@ -53,7 +53,6 @@
],
"trains": [
{
"correct": true,
"crowded": true,
"destination": {
"en": "Shibuya",
@@ -71,10 +70,11 @@
"intervalSec": 20,
"offsetSec": 3
},
"track": "14"
"track": "14",
"lineId": "yamanote",
"terminus": "shibuya"
},
{
"correct": false,
"destination": {
"en": "Tokyo",
"ja": "東京",
@@ -91,7 +91,9 @@
"intervalSec": 25,
"offsetSec": 10
},
"track": "8"
"track": "8",
"lineId": "chuo",
"terminus": "tokyo"
}
],
"signs": [
@@ -122,5 +124,7 @@
"x": 11,
"y": 5
}
]
],
"station": "shinjuku",
"to": "shibuya"
}

View File

@@ -55,7 +55,6 @@
],
"trains": [
{
"correct": true,
"crowded": true,
"destination": {
"en": "Ikebukuro",
@@ -73,10 +72,11 @@
"intervalSec": 25,
"offsetSec": 6
},
"track": "2"
"track": "2",
"lineId": "yamanote",
"terminus": "ikebukuro"
},
{
"correct": false,
"destination": {
"en": "Yokohama",
"ja": "横浜",
@@ -93,7 +93,9 @@
"intervalSec": 30,
"offsetSec": 12
},
"track": "4"
"track": "4",
"lineId": "toyoko",
"terminus": "yokohama"
}
],
"signs": [
@@ -124,5 +126,7 @@
"x": 29,
"y": 13
}
]
],
"station": "shibuya",
"to": "ikebukuro"
}

View File

@@ -92,9 +92,9 @@
},
{
"text": {
"en": "\u003c- Track 7 Tokaido Line (Shinagawa) Track 4 Yamanote Line (Ueno) -\u003e",
"en": "<- Track 7 Tokaido Line (Shinagawa) Track 4 Yamanote Line (Ueno) ->",
"ja": "← 7番線 東海道線 品川方面 4番線 山手線 上野方面 →",
"sv": "\u003c- Spår 7 Tokaido-linjen (Shinagawa) Spår 4 Yamanote-linjen (Ueno) -\u003e"
"sv": "<- Spår 7 Tokaido-linjen (Shinagawa) Spår 4 Yamanote-linjen (Ueno) ->"
},
"x": 3,
"y": 3,
@@ -115,7 +115,6 @@
"timeLimitSec": 420,
"trains": [
{
"correct": true,
"crowded": true,
"destination": {
"en": "Ueno",
@@ -133,10 +132,11 @@
"intervalSec": 24,
"offsetSec": 5
},
"track": "4"
"track": "4",
"lineId": "yamanote",
"terminus": "ueno"
},
{
"correct": false,
"destination": {
"en": "Shinagawa",
"ja": "品川",
@@ -153,7 +153,11 @@
"intervalSec": 28,
"offsetSec": 11
},
"track": "7"
"track": "7",
"lineId": "tokaido",
"terminus": "shinagawa"
}
]
}
],
"station": "tokyo",
"to": "ueno"
}

View File

@@ -11,23 +11,23 @@
"fareYen": 200,
"grid": [
"#################################",
"#S.\u003c..\u003c..#..\u003c..\u003c..\u003c..\u003c..#..\u003c..###",
"#..\u003e..\u003e..#..\u003e..\u003e..\u003e..\u003e..#..\u003e..###",
"#######\u003c\u003e#\u003c\u003e#\u003c\u003e####\u003c\u003e#\u003c\u003e####\u003c\u003e###",
"#..\u003c..\u003c..#.W\u003c..\u003c..\u003c..#..\u003c..\u003c..###",
"#.i\u003e..\u003e..#..\u003e..\u003e..\u003e..#..\u003eK.\u003e..###",
"#\u003c\u003e#############\u003c\u003e#######\u003c\u003e#\u003c\u003e###",
"#..#..\u003c..\u003c..\u003c.i\u003c..\u003c..\u003c..#..\u003c..###",
"#..#..\u003e..\u003e..\u003e..\u003e..\u003e..\u003e..#.T\u003ei.###",
"#\u003c\u003e####\u003c\u003e##########\u003c\u003e#\u003c\u003e#\u003c\u003e######",
"#..\u003c..\u003c..\u003c..#..\u003c..\u003c..#..#..\u003c..###",
"#..\u003e..\u003e..\u003e..#..\u003e..\u003e..#..#..\u003e..###",
"####\u003c\u003e#\u003c\u003e#\u003c\u003e#\u003c\u003e####\u003c\u003e#######\u003c\u003e###",
"#..\u003c..#..#..#..\u003c..#..\u003c..\u003c..\u003c..###",
"#..\u003e..#..#..#..\u003e..#..\u003e..\u003e..\u003e..###",
"#\u003c\u003e#######\u003c\u003e####\u003c\u003e###############",
"#G.\u003c..\u003c..\u003c..#..\u003c..\u003c..\u003c..\u003c..\u003c.G###",
"#pG\u003e..\u003e..\u003e..#..\u003e..\u003e..\u003e..\u003e..\u003eGP###",
"#S.<..<..#..<..<..<..<..#..<..###",
"#..>..>..#..>..>..>..>..#..>..###",
"#######<>#<>#<>####<>#<>####<>###",
"#..<..<..#.W<..<..<..#..<..<..###",
"#.i>..>..#..>..>..>..#..>K.>..###",
"#<>#############<>#######<>#<>###",
"#..#..<..<..<.i<..<..<..#..<..###",
"#..#..>..>..>..>..>..>..#.T>i.###",
"#<>####<>##########<>#<>#<>######",
"#..<..<..<..#..<..<..#..#..<..###",
"#..>..>..>..#..>..>..#..#..>..###",
"####<>#<>#<>#<>####<>#######<>###",
"#..<..#..#..#..<..#..<..<..<..###",
"#..>..#..#..#..>..#..>..>..>..###",
"#<>#######<>####<>###############",
"#G.<..<..<..#..<..<..<..<..<.G###",
"#pG>..>..>..#..>..>..>..>..>GP###",
"#################################",
"#################################",
"#################################"
@@ -64,9 +64,9 @@
},
{
"text": {
"en": "\u003c- Track 9 Keihin-Tohoku Line (Omiya) Track 3 Yamanote Line (Akihabara) -\u003e",
"en": "<- Track 9 Keihin-Tohoku Line (Omiya) Track 3 Yamanote Line (Akihabara) ->",
"ja": "← 9番線 京浜東北線 大宮方面 3番線 山手線 秋葉原方面 →",
"sv": "\u003c- Spår 9 Keihin-Tohoku-linjen (Omiya) Spår 3 Yamanote-linjen (Akihabara) -\u003e"
"sv": "<- Spår 9 Keihin-Tohoku-linjen (Omiya) Spår 3 Yamanote-linjen (Akihabara) ->"
},
"x": 14,
"y": 7,
@@ -87,7 +87,6 @@
"trains": [
{
"cars": 4,
"correct": true,
"destination": {
"en": "Akihabara",
"ja": "秋葉原",
@@ -107,11 +106,12 @@
"track": "3",
"womenOnlyCar": 1,
"womenOnlyFrom": 0,
"womenOnlyTo": 150
"womenOnlyTo": 150,
"lineId": "yamanote",
"terminus": "tokyo"
},
{
"cars": 3,
"correct": false,
"destination": {
"en": "Omiya",
"ja": "大宮",
@@ -128,7 +128,11 @@
"intervalSec": 30,
"offsetSec": 13
},
"track": "9"
"track": "9",
"lineId": "keihin-tohoku",
"terminus": "omiya"
}
]
}
],
"station": "ueno",
"to": "akihabara"
}

View File

@@ -0,0 +1,177 @@
{
"clutter": 1,
"crowd": 1,
"destination": {
"en": "Shinjuku",
"ja": "新宿",
"romaji": "Shinjuku",
"sv": "Shinjuku"
},
"difficulty": 4,
"fareYen": 180,
"grid": [
"#################################",
"#S#...#........i..#.............#",
"#.#.#.#.#######.#.#.###########.#",
"#...#.#....T#...#.#.......#..W#.#",
"#####.#######.###.#.#####.#.###.#",
"#...#...#.....#...#.....#.#...#.#",
"#.#.###.#.#####.#####.#.#.###.#.#",
"#.#.#...#.#.....#...#K#.#.....#.#",
"#.#.#.###.#.#####.#.###.#####.#.#",
"#...#.....#......i#...#.....#.#.#",
"#.###############.###.#.#####.#.#",
"#.#.........#..i..#...#.......#.#",
"#.#.#.#####.#.#.###.#.#####.###.#",
"#...#.....#...#.....#.....#.#...#",
"#.#######.#.###########.#.###.#.#",
"#.#.....#...#.....#.....#...#.#.#",
"#.#.###.#####.###.#.#######.#.###",
"#...#.#...#...#...#...#...#.#...#",
"#####.###G#.###.#####.#.###.###G#",
"#pG.....GqG.#...GQG...#.......GP#",
"#################################"
],
"id": "006-ikebukuro",
"kind": "main",
"maxMissedTrains": 2,
"name": {
"en": "Ikebukuro Station",
"ja": "池袋駅",
"sv": "Ikebukuro station"
},
"noise": 1,
"order": 6,
"party": 3,
"rideStops": 5,
"shop": [
"suit",
"rail_pass",
"onigiri_box"
],
"signs": [
{
"text": {
"en": "Ikebukuro Station. Track 6 Yamanote Line for Shinjuku: south-east. Tracks 1 and 2 Saikyo Line: south. Track 11 Marunouchi Line for Ogikubo: south-west.",
"ja": "池袋駅 6番線 山手線 新宿方面 → 南東 1番線・2番線 埼京線 → 南 11番線 丸ノ内線 荻窪方面 → 南西",
"sv": "Ikebukuro station. Spår 6 Yamanote-linjen mot Shinjuku: sydost. Spår 1 och 2 Saikyo-linjen: söderut. Spår 11 Marunouchi-linjen mot Ogikubo: sydväst."
},
"x": 15,
"y": 1,
"z": 0
},
{
"text": {
"en": "\u003c- Track 2 Saikyo Line for Omiya Track 1 Saikyo Line for Osaki -\u003e",
"ja": "← 2番線 埼京線 大宮方面 1番線 埼京線 大崎方面 →",
"sv": "\u003c- Spår 2 Saikyo-linjen mot Omiya Spår 1 Saikyo-linjen mot Osaki -\u003e"
},
"x": 17,
"y": 9,
"z": 0
},
{
"text": {
"en": "Track 6 Yamanote Line for Shinjuku: the gate in the south-east corner. Line map at the ticket machine.",
"ja": "6番線 山手線 新宿方面 → 南東口 改札 路線図 → 券売機",
"sv": "Spår 6 Yamanote-linjen mot Shinjuku: spärren i sydöstra hörnet. Linjekarta finns vid automaten."
},
"x": 15,
"y": 11,
"z": 0
}
],
"station": "ikebukuro",
"timeLimitSec": 480,
"to": "shinjuku",
"trains": [
{
"cars": 4,
"destination": {
"en": "Shinjuku",
"ja": "新宿",
"romaji": "Shinjuku"
},
"line": {
"en": "Yamanote Line",
"ja": "山手線",
"romaji": "Yamanote-sen"
},
"lineId": "yamanote",
"platform": "P",
"schedule": {
"dwellSec": 9,
"intervalSec": 30,
"offsetSec": 8
},
"terminus": "shinjuku",
"track": "6"
},
{
"cars": 3,
"destination": {
"en": "Omiya",
"ja": "大宮",
"romaji": "Omiya"
},
"line": {
"en": "Saikyo Line",
"ja": "埼京線",
"romaji": "Saikyo-sen"
},
"lineId": "saikyo",
"platform": "p",
"schedule": {
"dwellSec": 8,
"intervalSec": 34,
"offsetSec": 14
},
"terminus": "omiya",
"track": "2"
},
{
"cars": 3,
"destination": {
"en": "Osaki",
"ja": "大崎",
"romaji": "Osaki"
},
"line": {
"en": "Saikyo Line",
"ja": "埼京線",
"romaji": "Saikyo-sen"
},
"lineId": "saikyo",
"platform": "Q",
"schedule": {
"dwellSec": 8,
"intervalSec": 34,
"offsetSec": 20
},
"terminus": "osaki",
"track": "1"
},
{
"cars": 3,
"destination": {
"en": "Ogikubo",
"ja": "荻窪",
"romaji": "Ogikubo"
},
"line": {
"en": "Marunouchi Line",
"ja": "丸ノ内線",
"romaji": "Marunouchi-sen"
},
"lineId": "marunouchi",
"platform": "q",
"schedule": {
"dwellSec": 8,
"intervalSec": 28,
"offsetSec": 4
},
"terminus": "ogikubo",
"track": "11"
}
]
}

1009
resources/data/network.json Normal file

File diff suppressed because it is too large Load Diff