Format fix 2006/meyer/README.md

This commit is contained in:
Cody Boone Ferguson committed 2023-04-30 08:55:28 -07:00
1 parent d0b357e4c5
commit 1cb018146d
1 file changed
+43 -29
+43 -29
View File
@@ -1,7 +1,7 @@
# Best Game
Raphael Meyer
US
Raphael Meyer
US
## To build:
@@ -34,41 +34,46 @@ more text to fulfil the program's requirements.
This entry turns a newspaper solitaire puzzle into a competition
with the computer to be the last one moving. The object of this
source code is to determine the object of this source code! :-)
[source code](meyer.c) is to determine the object of this [source
code](meyer.c)! :-)
## Author's remarks:
I wanted submit a fully object-oriented entry to show that
object-orientated code:
1. is ridiculously bloated
2. is unreadable
3. isn't WYWIWID (what you write is what it does) anymore
1. is ridiculously bloated.
2. is unreadable.
3. isn't '`WYWIWID`' ('what you write is what it does') anymore.
But I just totally failed. No, I didn't fail in showing any of
the points above. Before I even had the chance to prove any of
these claims, (1) already brought me to my knees. The code got
so much bloated up, that I missed the size limit by a few hundred
so bloated up, that I missed the size limit by a few hundred
bytes. Therefore, I broke the only rule in this contest, I think
you shouldn't break in any case: Rule Nr 2, The size of ...
The degree of claim (2) actually depends on the compiler. As I
_manually_ compiled it from [a generic object-oriented programming
language] to C, it didn't just end up unreadable, but awfully
_manually_ translated it from a generic object-oriented programming
language to C, it didn't just end up unreadable, but awfully
messed up, i.e. obfuscated.
As it is already (pre)compiled to C, you could also call it an object-
As it is already (pre)translated to C, you could also call it an object-
disoriented program.
Comparing this program to a potential object-oriented implementation,
it is obvious, that object-oriented code isn't WYWIWID (what
you write is what it does). It may be tempting to think that
it is obvious, that object-oriented code isn't '`WYWIWID`' ('what
you write is what it does'). It may be tempting to think that
```
Object o;
```
might do something similar as
```c
struct not_an_object o;
```
But this program reveals that it doesn't. Even worse, this program only
reveals the tip of the iceberg, what kind of black magic is involved in
@@ -77,43 +82,52 @@ a simple declaration of an object.
A few things you can explore about object-orientation in this program
include:
- constructors (invoked by the new operator)
- new operators (every class gets its own new operator at compile time)
- virtual method tables
(all the virtual method tables have been combined to a single vtable)
- runtime method binding
- inheritance and polymorphism
- constructors (invoked by the new operator).
- new operators (every class gets its own new operator at compile time).
- virtual method tables (all the virtual method tables have been combined to a
single [vtable](https://en.wikipedia.org/wiki/Virtual_method_table)).
- runtime method binding.
-
[inheritance](https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming))
and
[polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science)).
It is left as an exercise to the reader to find a corresponding
implementation in a popular object-oriented programming language.
### Starting the game
./meyer [SEED]
```sh
./meyer [SEED]
```
### Gameplay
It is a sudoku based game. The goal of the game is to be able
to do the last valid 'move'.
It is a [sudoku](https://en.wikipedia.org/wiki/Sudoku) based game. The goal of
the game is to be able to do the last valid 'move'.
On your turn you have to set a free cell to a value between 1 to 9 without
breaking the following rule. Any number must be unique in its:
1. row
2. column
3. 3x3 block.
1. row
2. column
3. 3x3 block.
Expected input for your move:
row column number
```
row column number
```
where
row: [a-i]
column: [0-8]
number: [1-9].
```
row: [a-i]
column: [0-8]
number: [1-9].
```
The game can be aborted with 'q'.
The game can be aborted with `q`.
The one who can do the last move wins the game.