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:
1 parent
adf7a28017
commit
941426e730
1 file changed
+40
-35
+40
-35
@@ -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:
|
||||||
|
|||||||
Reference in new issue
Block a user