diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/org/blog/c/a.out | bin | 0 -> 9976 bytes | |||
-rw-r--r-- | src/org/blog/c/game.c | 126 | ||||
-rw-r--r-- | src/org/blog/c/game.org | 64 |
3 files changed, 183 insertions, 7 deletions
diff --git a/src/org/blog/c/a.out b/src/org/blog/c/a.out new file mode 100755 index 0000000..073e240 --- /dev/null +++ b/src/org/blog/c/a.out Binary files differdiff --git a/src/org/blog/c/game.c b/src/org/blog/c/game.c new file mode 100644 index 0000000..02116e7 --- /dev/null +++ b/src/org/blog/c/game.c @@ -0,0 +1,126 @@ +#include <stdio.h> +#include <stdlib.h> +int main(int argc, char *argv[]) { + int n=5,m=5; + char input,map[50][50]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + map[i][j] = '-'; + } + } + int stop=0,i=0,moves=0,score=0,pos[2] = {n/2,m/2}; + int bonus[2]; + int trap[2] ; + int death[2]; + map[pos[0]][pos[1]] = '+'; + do{ + bonus[0] = arc4random_uniform(n); bonus[1] = arc4random_uniform(m); + trap[0] = arc4random_uniform(n); trap[1] = arc4random_uniform(m); + death[0] = arc4random_uniform(n); death[1] = arc4random_uniform(m); + }while((bonus[0] == trap[0] && bonus[1] == trap[1]) || (bonus[0] == death[0] && bonus[1] == death[1]) || (trap[0] == death[0] && trap[1] == death[1]) || (bonus[0] == pos[0] && bonus[1] == pos[1]) || (trap[0] == pos[0] && trap[1] == pos[1]) || (death[0] == pos[0] && death[1] == pos[1])); + map[bonus[0]][bonus[1]] = 'B'; + map[trap[0]][trap[1]] = 'T'; + map[death[0]][death[1]] = 'D'; + do{ + printf("Map:\n"); + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + printf("%c ", map[i][j]); + } + printf("\n"); + } + printf("Score: %d\n", score); + printf("Moves: %d\n", moves); + printf("Enter a direction (w,a,s,d) or c to quit: "); + scanf(" %c", &input); +// pos[0] updown pos[1] lr + if (input == 'w') { + printf("Moving up\n"); + map[pos[0]][pos[1]] = '-'; + if (pos[0] == 0) { + pos[0] = n-1; + } + else { + pos[0]--; + } + } else if (input == 'a') { + printf("Moving left\n"); + map[pos[0]][pos[1]] = '-'; + if (pos[1] == 0) { + pos[1] = m-1; + } + else { + pos[1]--; + } + } else if (input == 's') { + + printf("Moving down\n"); + map[pos[0]][pos[1]] = '-'; + if (pos[0] == n-1) { + pos[0] = 0; + } + else { + pos[0]++; + } + } else if (input == 'd') { + printf("Moving right\n"); + map[pos[0]][pos[1]] = '-'; + if (pos[1] == m-1) { + pos[1] = 0; + } + else { + pos[1]++; + } + } else if (input == 'c') { + printf("Quitting\n"); + } else { + printf("Invalid input\n"); + } + map[pos[0]][pos[1]] = '+'; + if (pos[0] == bonus[0] && pos[1] == bonus[1]) { + score++; + do{ + bonus[0]= arc4random_uniform(n); + bonus[1]= arc4random_uniform(m); + }while((bonus[0] == trap[0] && bonus[1] == trap[1]) || (bonus[0] == death[0] && bonus[1] == death[1]) || (bonus[0] == pos[0] && bonus[1] == pos[1])); + } + if (pos[0] == trap[0] && pos[1] == trap[1]) { + score--; + do{ + trap[0]= arc4random_uniform(n); + trap[1]= arc4random_uniform(m); + }while((trap[0] == bonus[0] && trap[1] == bonus[1]) || (trap[0] == death[0] && trap[1] == death[1]) || (trap[0] == pos[0] && trap[1] == pos[1])); + } + if (pos[0] == death[0] && pos[1] == death[1]) { + score = 0; + do{ + death[0]= arc4random_uniform(n); + death[1]= arc4random_uniform(m); + }while((death[0] == bonus[0] && death[1] == bonus[1]) || (death[0] == trap[0] && death[1] == trap[1]) || (death[0] == pos[0] && death[1] == pos[1])); + } + if (score % 3 == 0 && score != 0 && stop == 0) { + map[death[0]][death[1]] = '-'; + do{ + death[0]= arc4random_uniform(n); + death[1]= arc4random_uniform(m); + }while((death[0] == bonus[0] && death[1] == bonus[1]) || (death[0] == trap[0] && death[1] == trap[1]) || (death[0] == pos[0] && death[1] == pos[1])); + stop = 1; + } + else if (score % 3 != 0) { + stop = 0; + } + if (moves % 5 == 0 && moves != 0) { + do{ + map[trap[0]][trap[1]] = '-'; + trap[0]= arc4random_uniform(n); + trap[1]= arc4random_uniform(m); + }while((trap[0] == bonus[0] && trap[1] == bonus[1]) || (trap[0] == death[0] && trap[1] == death[1]) || (trap[0] == pos[0] && trap[1] == pos[1])); + + } + map[bonus[0]][bonus[1]] = 'B'; + map[trap[0]][trap[1]] = 'T'; + map[death[0]][death[1]] = 'D'; + moves++; + }while(input != 'c'); + return 0; +} diff --git a/src/org/blog/c/game.org b/src/org/blog/c/game.org index 3ed154e..1f618e4 100644 --- a/src/org/blog/c/game.org +++ b/src/org/blog/c/game.org @@ -150,17 +150,19 @@ int main(int argc, char *argv[]) { #+END_SRC - Let's go step by step and see what we can fix or improve, to start off, line 4 to 10 can be reduced to a single line (which will be beneficial later too) - #+BEGIN_SRC c -n 4 -char input,map[5][5] = {'-'}; - #+END_SRC - Much better...but can be even more better, why stop at 5 when we can give the choice to the user !! + Let's go step by step and see what we can fix or improve, to start off, line 4 to 10 can be reduced to 7 or 8 lines (which will be beneficial later too) #+BEGIN_SRC c -n 4 int n=5,m=5; -char input,map[n][m]={'-'}; +char input,map[50][50]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + map[i][j] = '-'; + } + } + #+END_SRC - For now at least, n and m are hardcoded to 5, but this will change later. + For now at least, n and m are hardcoded to 5, but this will change later. And I picked 50x50 as a max size because why not Of course we have the usual inits on line 11, though since we are using variables instead of hardcoding 5, we will have to find the center by ourselves #+BEGIN_SRC c -n 11 @@ -239,3 +241,51 @@ After that we have some logic which should also be changed to account for the n #+END_SRC What this achieves is the "teleportation effect" whenever you are at the border of the screen! + + +Now we fix things from line 80 to the end of the program, aka replacing ever occurrence of 5 with n or m +#+BEGIN_SRC c -n 80 + if (pos[0] == bonus[0] && pos[1] == bonus[1]) { + score++; + do{ + bonus[0]= arc4random_uniform(n); + bonus[1]= arc4random_uniform(m); + }while((bonus[0] == trap[0] && bonus[1] == trap[1]) || (bonus[0] == death[0] && bonus[1] == death[1]) || (bonus[0] == pos[0] && bonus[1] == pos[1])); + } + if (pos[0] == trap[0] && pos[1] == trap[1]) { + score--; + do{ + trap[0]= arc4random_uniform(n); + trap[1]= arc4random_uniform(m); + }while((trap[0] == bonus[0] && trap[1] == bonus[1]) || (trap[0] == death[0] && trap[1] == death[1]) || (trap[0] == pos[0] && trap[1] == pos[1])); + } + if (pos[0] == death[0] && pos[1] == death[1]) { + score = 0; + do{ + death[0]= arc4random_uniform(n); + death[1]= arc4random_uniform(m); + }while((death[0] == bonus[0] && death[1] == bonus[1]) || (death[0] == trap[0] && death[1] == trap[1]) || (death[0] == pos[0] && death[1] == pos[1])); + } + if (score % 3 == 0 && score != 0 && stop == 0) { + map[death[0]][death[1]] = '-'; + do{ + death[0]= arc4random_uniform(n); + death[1]= arc4random_uniform(m); + }while((death[0] == bonus[0] && death[1] == bonus[1]) || (death[0] == trap[0] && death[1] == trap[1]) || (death[0] == pos[0] && death[1] == pos[1])); + stop = 1; + } + else if (score % 3 != 0) { + stop = 0; + } + if (moves % 5 == 0 && moves != 0) { + do{ + map[trap[0]][trap[1]] = '-'; + trap[0]= arc4random_uniform(n); + trap[1]= arc4random_uniform(m); + }while((trap[0] == bonus[0] && trap[1] == bonus[1]) || (trap[0] == death[0] && trap[1] == death[1]) || (trap[0] == pos[0] && trap[1] == pos[1])); + + } +#+END_SRC + + +Aaaaand this should be it |