Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α13.9 · Κινήσεις σε πλέγμα (Παλιό θέμα)

Εργαστήριο 7, Άσκηση 5 · Δυσκολία ★★★ · programming · Κεφάλαια: 13, 12

Γράψτε ένα πρόγραμμα που παίρνει δύο εισόδους: (1) το περιεχόμενο μιας πίστας pacman από την πρότυπη είσοδο και (2) τις κινήσεις που πρέπει να κάνει ο pacman πάνω στο πλέγμα ως το πρώτο όρισμα και τυπώνει την τελική κατάσταση του παιχνιδιού μετά από αυτές τις κινήσεις. Η πίστα pacman θα έχει την ακόλουθη μορφή:

  1. Διάσταση του πλέγματος του παιχνιδιού (δεκαδικός ακέραιος).
  2. Τετράγωνο πλέγμα με χαρακτήρες ‘.’ και ένα ‘P’ για την αρχική θέση του pacman. Όλοι οι άλλοι χαρακτήρες αγνοούνται.

Οι κινήσεις που πρέπει να κάνει ο pacman θα αποτελούνται από τους 4 χαρακτήρες ‘U’ (Up), ‘D’ (Down), ‘L’ (Left), ‘R’ (Right). Όταν ο pacman κινείται σε κάποια θέση, τότε η τελεία (‘.’) σε εκείνη την θέση εξαφανίζεται. Η πίστα είναι τόρος, δηλαδή αν είσαι στην τελευταία γραμμή της και κινηθείς προς τα κάτω (D) τότε μεταφέρεσαι στην πρώτη γραμμή. Αντίστοιχα για κινήσεις αριστερά-δεξιά. Παραδείγματα εκτέλεσης ακολουθούν:

$ gcc -o pacman pacman.c
$ cat level.txt
7
.......
.......
..P....
.......
.......
.......
.......
$ ./pacman RRD < level.txt
.......
.......
..   ..
....P..
.......
.......
.......
$ ./pacman RRDDLL < level.txt
.......
.......
..   ..
.... ..
..P  ..
.......
.......
$ ./pacman RRDDLLUU < level.txt
.......
.......
..P  ..
.. . ..
..   ..
.......
.......
$ ./pacman RRDDLLUULLLL < level.txt
.......
.......
     P
.. . ..
..   ..
.......
.......

Υπόδειξη

Κρατήστε την πίστα σε δισδιάστατο πίνακα χαρακτήρων δεσμευμένο δυναμικά (η διάσταση διαβάζεται πρώτη) και διαβάστε τα κελιά αγνοώντας κάθε χαρακτήρα εκτός από . και P. Διατρέξτε το argv[1] χαρακτήρα-χαρακτήρα: σε κάθε κίνηση αδειάστε το τρέχον κελί και μετακινήστε τη θέση. Για την αναδίπλωση του τόρου χρησιμοποιήστε υπόλοιπο διαίρεσης, προσέχοντας ότι στη C το υπόλοιπο αρνητικού αριθμού είναι αρνητικό.

Αριθμός στον οδηγό: Α13.9 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: lab-lab07-pacman · Σύνδεσμος: https://progintro.github.io/study/questions/labs/lab-lab07-pacman.html · Markdown (GitHub)