Format fix 2004/vik1/README.md

I discovered a way to what must be considered cheating though it's
probably just a feature. I referred to this in the try section,
challenging people to find out how. Of course 'cheat' is subjective
here.
This commit is contained in:
Cody Boone Ferguson committed 2023-04-26 08:42:05 -07:00
1 parent adf7a28017
commit 941426e730
1 file changed
+40 -35
+40 -35
View File
@@ -1,11 +1,9 @@
# Best X11 Game # Best X11 Game
Daniel Vik Daniel Vik
926 Genter Street US
La Jolla, Ca 92037 <http://www.vik.cc/>
US <http://www.danielvik.com>
http://www.vik.cc/
## To build: ## To build:
@@ -28,11 +26,13 @@ make
./vik1 ad3 ./vik1 ad3
``` ```
Can you figure out how to cheat?
## Judges' remarks: ## Judges' remarks:
Danial Vik has presented a tour de force feature rich X11-based Daniel Vik has presented a tour de force feature rich X11-based
racing game that fit within the contest size limits. Take a racing game that fit within the contest size limits. Take a
glace at the feature list he provided below. Amazing! glance at the feature list he provided below. Amazing!
Happy touring on the road and in the code! Happy touring on the road and in the code!
@@ -54,11 +54,11 @@ This program is a complete car race game with a lot of nice features:
* Slippery road when driving in the winter. * Slippery road when driving in the winter.
* When driving off the road, the car slows down to a halt * When driving off the road, the car slows down to a halt.
* Three different race tracks that takes about one minute to complete. * Three different race tracks that takes about one minute to complete.
* Speed meter. * Speedometer.
* Computer driven opponent cars. * Computer driven opponent cars.
@@ -71,69 +71,74 @@ This program is a complete car race game with a lot of nice features:
### Build and Run ### Build and Run
Compile the source code and link x libraries if necessary. Compile the source code and link x libraries if necessary.
The program takes three options which have to be typed in a specific The program takes three options which have to be typed in a specific
order as described below. order as described below.
Usage: vik1 ['a']['d'][#] ```sh
Usage: ./vik1 ['a']['d'][#]
a - Advanced racing in a winter landscape a - Advanced racing in a winter landscape
d - Racing in at night in the dark d - Racing in at night in the dark
# - Race track selection 1-3 are valid numbers # - Race track selection 1-3 are valid numbers
```
Here are a few examples: Here are a few examples:
```
Command line: Description: Command line: Description:
$ ./vik1 Run track 1 at daytime in the summer $ ./vik1 Run track 1 at daytime in the summer
$ ./vik1 a Run track 1 at daytime in the winter $ ./vik1 a Run track 1 at daytime in the winter
$ ./vik1 d Run track 1 at night in the summer $ ./vik1 d Run track 1 at night in the summer
$ ./vik1 3 Run track 3 at daytime in the summer $ ./vik1 3 Run track 3 at daytime in the summer
$ ./vik1 d3 Run track 3 at night in the summer $ ./vik1 d3 Run track 3 at night in the summer
$ ./vik1 ad2 Run track 2 at night in the winter $ ./vik1 ad2 Run track 2 at night in the winter
```
Note that the order in which the argument characters are entered is Note that the order in which the argument characters are entered is
important. It is for example not possible to type ./vik1 da. (Well it is important. It is for example not possible to type `./vik1 da`. (Well it is
possible, but the result will not be as expected.) possible, but the result will not be as expected.)
The space key accelerates the car. Releasing the space key slowly The space key accelerates the car. Releasing the space key slowly
reduces the speed. The left and right arrow keys are used to steer the reduces the speed. The left and right arrow keys are used to steer the
car. car.
### Obfuscation ### Obfuscation
The main obfuscation is the fact that the program is extremely compact. The main obfuscation is the fact that the program is extremely compact.
There are a few things I didn't want to do, e.g. define #define to a There are a few things I didn't want to do, e.g. define `#define` to a
single letter to save some space, or to remove casts to save some space. single letter to save some space, or to remove casts to save some space.
The program uses a lot of variables. In fact, all letters a-z are used The program uses a lot of variables. In fact, all letters a-z are used
and most letters A-Z. and most letters A-Z.
The constants are chosen very carefully and thy have multiple purposes, The constants are chosen very carefully and they have multiple purposes,
e.g. a constant can be both the length of the track and a color. e.g. a constant can be both the length of the track and a color.
Most of the code is kept inside five for loops without body. Each for Most of the code is kept inside five for loops each without a body. Each for
loop does many things. One for loop draws all cars by restarting a loop does many things. One for loop draws all cars by restarting a
couple of times. Another draws the road, mountains, and the sun. couple of times. Another draws the road, mountains, and the sun.
Main is called recursively. The return value and output depends on the `main()` is called recursively. The return value and output depends on the
arguments. main can return the current time, draw lines and of course be arguments. `main()` can return the current time, draw lines and of course be
the entrypoint of the application. the entry point of the application.
The program frequently uses the ? operator mainly to save space but it The program frequently uses the `?:` operator mainly to save space but it
makes the program more obscure. makes the program more obscure.
### Compiler warnings ### Compiler warnings
There are no compiler warnings when compiling with -ansi but there are There are no compiler warnings when compiling with -ansi but there are
quite many warnings from lclint. Mainly because the program is very quite many warnings from lclint. Mainly because the program is very
optimized for code size. optimized for code size.
### Limitations ### Limitations
The program only compiles and runs on X based systems. The program only compiles and runs on X based systems.
The program requires a display with 24 bit color depth. It also assumes The program requires a display with 24 bit color depth. It also assumes
that the byte order of the colors are as on my Linux PC. That is, The that the byte order of the colors are as on my Linux PC. That is, The
colors are represented by a 32 bit value where the bytes (from high to colors are represented by a 32 bit value where the bytes (from high to
low) are { 0, RED, GREEN, BLUE }. low) are { 0, RED, GREEN, BLUE }.
## Copyright and CC BY-SA 4.0 License: ## Copyright and CC BY-SA 4.0 License: