init commit
BIN
C_BOOK/1.5.1/a.out
Executable file
13
C_BOOK/1.5.1/main.c
Normal file
@ -0,0 +1,13 @@
|
||||
#define Q 113
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int c;
|
||||
while (c != 'q') {
|
||||
|
||||
c = getchar();
|
||||
printf("%d\n",c);
|
||||
}
|
||||
return 0;
|
||||
}
|
2
C_BOOK/1.5.1/test.txt
Normal file
@ -0,0 +1,2 @@
|
||||
bob is a faggot
|
||||
bob is also an u.
|
52
C_BOOK/1.9-arrays/main.c
Normal file
@ -0,0 +1,52 @@
|
||||
#include <stdio.h>
|
||||
#define MAXLINE 1000
|
||||
|
||||
int getline( char line[], int maxline);
|
||||
void copy(char to[], char from[]);
|
||||
|
||||
/* print longest input line */
|
||||
|
||||
main()
|
||||
{
|
||||
int len; /* current line length */
|
||||
int max; /* maximum length seen so far */
|
||||
char line[MAXLINE]; /* current input line */
|
||||
char longest[MAXLINE]; /* longest line saved here */
|
||||
|
||||
max = 0;
|
||||
while ((len = getline(line, MAXLINE)) > 0)
|
||||
if (len > max) {
|
||||
max = len;
|
||||
copy(longest, line);
|
||||
}
|
||||
if (max > 0) { /* there was a line */
|
||||
printf("%s", longest);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* getline: read a line into s, return length */
|
||||
int getline(char s[], int lim)
|
||||
{
|
||||
int c, i;
|
||||
|
||||
for (i=0; i<lim-1 && (c=getchar()) !=EOF && c != '\n'; ++i)
|
||||
s[i] =c;
|
||||
if (c == '\n') {
|
||||
s[i] = c;
|
||||
++i;
|
||||
}
|
||||
s[i] = '\0';
|
||||
return i;
|
||||
}
|
||||
|
||||
/* copy: copy 'from' into 'to'; assume to is big enough */
|
||||
void copy (char to[], char from[])
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while ((to[i] = from[i]) != '\0')
|
||||
++i;
|
||||
}
|
||||
|
BIN
c_graphics/sample/demo
Executable file
24
c_graphics/sample/demo.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* demo.c*/
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glu.h>
|
||||
void setup() { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); }
|
||||
void display()
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glColor3f(0.0f, 0.0f, 0.0f);
|
||||
glRectf(-0.75f,0.75f, 0.75f, -0.75f);
|
||||
glutSwapBuffers();
|
||||
}
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
glutInit(&argc, argv);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
|
||||
glutInitWindowSize(800,600);
|
||||
glutCreateWindow("Hello World");
|
||||
|
||||
setup();
|
||||
glutDisplayFunc(display);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
14
c_graphics/sample/test.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include<graphics.h>
|
||||
#include<conio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int gd = DETECT, gm;
|
||||
|
||||
initgraph(&gd, &gm, "C:\\TC\\BGI");
|
||||
|
||||
getch();
|
||||
closegraph();
|
||||
return0
|
||||
}
|
||||
|
3
curses/example_1/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
LDFLAGS=-lncurses
|
||||
|
||||
all: demo
|
BIN
curses/example_1/demo
Executable file
92
curses/example_1/demo.c
Normal file
@ -0,0 +1,92 @@
|
||||
#include <stdlib.h>
|
||||
#include <ncurses.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define DELAY 30000
|
||||
|
||||
void quit();
|
||||
void draw_borders(WINDOW *screen);
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
int x=0, y=0;
|
||||
int max_y = 0, max_x = 0;
|
||||
int next_x = 0;
|
||||
int direction = 1;
|
||||
int keypress = 0;
|
||||
|
||||
initscr(); // Initialize window
|
||||
noecho(); // Don't echo keypresses
|
||||
curs_set(FALSE); // No cursor
|
||||
nodelay(stdscr,1); // Stop getch from waiting.
|
||||
//Global var 'stdscr' is created by the call to 'initscr()'
|
||||
getmaxyx(stdscr, max_y, max_x); //Get the max x/y of the screen
|
||||
|
||||
WINDOW *main = newwin(max_y - 3, max_x, 0, 0);
|
||||
WINDOW *sub = newwin(3, max_x, max_y - 3, 0);
|
||||
draw_borders(main);
|
||||
draw_borders(sub);
|
||||
|
||||
|
||||
|
||||
while(1) {
|
||||
getmaxyx(stdscr, max_y, max_x);
|
||||
keypress = getch(); // Listen for exit command
|
||||
clear(); // Clear screen of all previous chars
|
||||
mvprintw(y, x, "o"); // Print our "ball" at the current xy position
|
||||
refresh();
|
||||
|
||||
usleep(DELAY); // Shorter delay between movements
|
||||
|
||||
next_x = x + direction;
|
||||
|
||||
if (keypress == 'q') {
|
||||
quit();
|
||||
}
|
||||
|
||||
if (next_x >= max_x || next_x < 0) {
|
||||
direction*= -1;
|
||||
}
|
||||
else {
|
||||
x+= direction;
|
||||
}
|
||||
mvwin(sub, 50, 50);
|
||||
wrefresh(sub);
|
||||
|
||||
// x++; // Advance the ball to the right
|
||||
}
|
||||
|
||||
// mvprintw(0, 0, "Hello, world!"); //Print some words in the spot 0,0
|
||||
// refresh(); // refresh window so words appear
|
||||
|
||||
// sleep(1); //derp
|
||||
// endwin(); // Restore normal terminal behavior
|
||||
}
|
||||
|
||||
void draw_borders(WINDOW *screen) {
|
||||
int x, y, i;
|
||||
|
||||
getmaxyx(screen, y, x);
|
||||
|
||||
// 4 corners
|
||||
mvwprintw(screen, 0, 0, "+");
|
||||
mvwprintw(screen, y - 1, 0, "+");
|
||||
mvwprintw(screen, 0, x - 1, "+");
|
||||
mvwprintw(screen, y - 1, x - 1, "+");
|
||||
|
||||
// sides
|
||||
for (i = 1; i < (y - 1); i++) {
|
||||
mvwprintw(screen, i, 0, "|");
|
||||
mvwprintw(screen, i, x - 1, "|");
|
||||
}
|
||||
|
||||
// top and bottom
|
||||
for (i = 1; i < (x - 1); i++) {
|
||||
mvwprintw(screen, 0, i, "-");
|
||||
mvwprintw(screen, y - 1, i, "-");
|
||||
}
|
||||
}
|
||||
|
||||
void quit(){
|
||||
endwin();
|
||||
exit(0);
|
||||
}
|
3
curses/example_1/test/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
LDFLAGS=-lncurses
|
||||
|
||||
all: demo
|
BIN
curses/example_1/test/demo
Executable file
78
curses/example_1/test/demo.c
Normal file
@ -0,0 +1,78 @@
|
||||
#include <ncurses.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void draw_borders(WINDOW *screen) {
|
||||
int x, y, i;
|
||||
|
||||
getmaxyx(screen, y, x);
|
||||
|
||||
// 4 corners
|
||||
mvwprintw(screen, 0, 0, "+");
|
||||
mvwprintw(screen, y - 1, 0, "+");
|
||||
mvwprintw(screen, 0, x - 1, "+");
|
||||
mvwprintw(screen, y - 1, x - 1, "+");
|
||||
|
||||
// sides
|
||||
for (i = 1; i < (y - 1); i++) {
|
||||
mvwprintw(screen, i, 0, "|");
|
||||
mvwprintw(screen, i, x - 1, "|");
|
||||
}
|
||||
|
||||
// top and bottom
|
||||
for (i = 1; i < (x - 1); i++) {
|
||||
mvwprintw(screen, 0, i, "-");
|
||||
mvwprintw(screen, y - 1, i, "-");
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int parent_x, parent_y, new_x, new_y;
|
||||
int score_size = 3;
|
||||
|
||||
initscr();
|
||||
noecho();
|
||||
curs_set(FALSE);
|
||||
|
||||
// set up initial windows
|
||||
getmaxyx(stdscr, parent_y, parent_x);
|
||||
|
||||
WINDOW *field = newwin(parent_y - score_size, parent_x, 0, 0);
|
||||
WINDOW *score = newwin(score_size, parent_x, parent_y - score_size, 0);
|
||||
|
||||
draw_borders(field);
|
||||
draw_borders(score);
|
||||
|
||||
while(1) {
|
||||
getmaxyx(stdscr, new_y, new_x);
|
||||
|
||||
if (new_y != parent_y || new_x != parent_x) {
|
||||
parent_x = new_x;
|
||||
parent_y = new_y;
|
||||
|
||||
wresize(field, new_y - score_size, new_x);
|
||||
wresize(score, score_size, new_x);
|
||||
mvwin(score, new_y - score_size, 0);
|
||||
|
||||
wclear(stdscr);
|
||||
wclear(field);
|
||||
wclear(score);
|
||||
|
||||
draw_borders(field);
|
||||
draw_borders(score);
|
||||
}
|
||||
|
||||
// draw to our windows
|
||||
mvwprintw(field, 1, 1, "Field");
|
||||
mvwprintw(score, 1, 1, "Score");
|
||||
|
||||
// refresh each window
|
||||
wrefresh(field);
|
||||
wrefresh(score);
|
||||
}
|
||||
|
||||
endwin();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
3
curses/fun/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
LDFLAGS=-lncurses
|
||||
|
||||
all: fun
|
BIN
curses/fun/fun
Executable file
134
curses/fun/fun.c
Normal file
@ -0,0 +1,134 @@
|
||||
#include <stdlib.h>
|
||||
#include <ncurses.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void quit();
|
||||
void draw_borders(WINDOW *screen);
|
||||
int move_player(int keypress, int* player_y, int* player_x);
|
||||
|
||||
void refresh_window(WINDOW *screen);
|
||||
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
int max_y, max_x, new_y, new_x, field_max_x, field_max_y, player_x, player_y;
|
||||
int next_x = 0;
|
||||
int keypress;
|
||||
int control_size = 5;
|
||||
|
||||
initscr(); // Initialize window
|
||||
noecho(); // Don't echo keypresses
|
||||
curs_set(FALSE); // No cursor
|
||||
nodelay(stdscr,1); // Stop getch from waiting.
|
||||
|
||||
getmaxyx(stdscr, max_y, max_x); //Get the max x/y of the screen
|
||||
|
||||
|
||||
WINDOW *field = newwin(max_y - control_size, max_x, 0, 0);
|
||||
WINDOW *controls = newwin(control_size, max_x, max_y - control_size, 0);
|
||||
|
||||
draw_borders(field);
|
||||
draw_borders(controls);
|
||||
|
||||
|
||||
//center player on field
|
||||
getmaxyx(field, field_max_y, field_max_x);
|
||||
|
||||
player_x = field_max_x/2;
|
||||
player_y = field_max_y/2;
|
||||
|
||||
while(1){
|
||||
getmaxyx(stdscr, new_y, new_x);
|
||||
|
||||
keypress = getch(); // Listen for commands; must be before window refresh
|
||||
|
||||
|
||||
if (new_y != max_y || new_x != max_x) {
|
||||
max_x = new_x;
|
||||
max_y = new_y;
|
||||
|
||||
wresize(field, new_y - control_size, new_x);
|
||||
wresize(controls, control_size, new_x);
|
||||
mvwin(controls, new_y - control_size, 0);
|
||||
wclear(stdscr);
|
||||
wclear(field);
|
||||
wclear(controls);
|
||||
|
||||
draw_borders(field);
|
||||
draw_borders(controls);
|
||||
wrefresh(stdscr);
|
||||
}
|
||||
|
||||
mvwprintw(field, 1, 1, "Field");
|
||||
mvwprintw(field, player_y, player_x, "o");
|
||||
|
||||
mvwprintw(controls, 1, 1, "Commands");
|
||||
mvwprintw(controls, 3, 1, "^Q to quit");
|
||||
|
||||
wrefresh(field);
|
||||
wrefresh(controls);
|
||||
|
||||
if (keypress != -1) {
|
||||
move_player(keypress, &player_y, &player_x);
|
||||
refresh_window(field);
|
||||
}
|
||||
}
|
||||
endwin();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int move_player(int keypress, int* player_y, int* player_x){
|
||||
if (keypress == 'w'){
|
||||
*player_y = *player_y - 1;
|
||||
}
|
||||
|
||||
else if (keypress == 'a'){
|
||||
*player_x = *player_x - 1;
|
||||
}
|
||||
else if (keypress == 's'){
|
||||
*player_y = *player_y + 1;
|
||||
}
|
||||
else if (keypress == 'd'){
|
||||
*player_x = *player_x + 1;
|
||||
}
|
||||
|
||||
else if (keypress == 17) {
|
||||
quit();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void refresh_window(WINDOW *screen) {
|
||||
wclear(screen);
|
||||
draw_borders(screen);
|
||||
wrefresh(screen);
|
||||
}
|
||||
|
||||
void draw_borders(WINDOW *screen) {
|
||||
int x, y, i;
|
||||
|
||||
getmaxyx(screen, y, x);
|
||||
|
||||
// 4 corners
|
||||
mvwprintw(screen, 0, 0, "+");
|
||||
mvwprintw(screen, y - 1, 0, "+");
|
||||
mvwprintw(screen, 0, x - 1, "+");
|
||||
mvwprintw(screen, y - 1, x - 1, "+");
|
||||
|
||||
// sides
|
||||
for (i = 1; i < (y - 1); i++) {
|
||||
mvwprintw(screen, i, 0, "|");
|
||||
mvwprintw(screen, i, x - 1, "|");
|
||||
}
|
||||
|
||||
// top and bottom
|
||||
for (i = 1; i < (x - 1); i++) {
|
||||
mvwprintw(screen, 0, i, "-");
|
||||
mvwprintw(screen, y - 1, i, "-");
|
||||
}
|
||||
}
|
||||
|
||||
void quit(){
|
||||
endwin();
|
||||
exit(0);
|
||||
}
|
BIN
lazyfoodSDL/01_hello_SDL/01_hello_SDL
Executable file
56
lazyfoodSDL/01_hello_SDL/01_hello_SDL.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
/*This source code copyrighted by Lazy Foo' Productions (2004-2015)
|
||||
and may not be redistributed without written permission.*/
|
||||
|
||||
//Using SDL and standard IO
|
||||
#include <SDL2/SDL.h>
|
||||
#include <stdio.h>
|
||||
|
||||
//Screen dimension constants
|
||||
const int SCREEN_WIDTH = 640;
|
||||
const int SCREEN_HEIGHT = 480;
|
||||
|
||||
int main( int argc, char* args[] )
|
||||
{
|
||||
//The window we'll be rendering to
|
||||
SDL_Window* window = NULL;
|
||||
|
||||
//The surface contained by the window
|
||||
SDL_Surface* screenSurface = NULL;
|
||||
|
||||
//Initialize SDL
|
||||
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
|
||||
{
|
||||
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
|
||||
}
|
||||
else
|
||||
{
|
||||
//Create window
|
||||
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
|
||||
if( window == NULL )
|
||||
{
|
||||
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
|
||||
}
|
||||
else
|
||||
{
|
||||
//Get window surface
|
||||
screenSurface = SDL_GetWindowSurface( window );
|
||||
|
||||
//Fill the surface white
|
||||
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
|
||||
|
||||
//Update the surface
|
||||
SDL_UpdateWindowSurface( window );
|
||||
|
||||
//Wait two seconds
|
||||
SDL_Delay( 2000 );
|
||||
}
|
||||
}
|
||||
|
||||
//Destroy window
|
||||
SDL_DestroyWindow( window );
|
||||
|
||||
//Quit SDL subsystems
|
||||
SDL_Quit();
|
||||
|
||||
return 0;
|
||||
}
|
BIN
lazyfoodSDL/01_hello_SDL/01_hello_SDL.zip
Normal file
20
lazyfoodSDL/01_hello_SDL/Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
#OBJS specifies which files to compile as part of the project
|
||||
OBJS = 01_hello_SDL.cpp
|
||||
|
||||
#CC specifies which compiler to use
|
||||
CC = clang
|
||||
|
||||
#COMPILER_FLAGS specifies the additional compilation options we're using
|
||||
# -w suppress all warnings
|
||||
COMPILER_FLAGS = -w
|
||||
|
||||
#LINKER_FLAGS specifies the libraries we're linking against
|
||||
LINKER_FLAGS = -lSDL2
|
||||
|
||||
#OBJ_NAME specifies the name of our executable
|
||||
OBJ_NAME= 01_hello_SDL
|
||||
|
||||
#This is the target that compiles our executable
|
||||
all : $(OBJS)
|
||||
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
||||
|
117
lazyfoodSDL/02_image/02_image.cpp
Normal file
@ -0,0 +1,117 @@
|
||||
/*This source code copyrighted by Lazy Foo' Productions (2004-2015)
|
||||
and may not be redistributed without written permission.*/
|
||||
|
||||
//Using SDL and standard IO
|
||||
#include <SDL2/SDL.h>
|
||||
#include <stdio.h>
|
||||
|
||||
//Screen dimensions
|
||||
const int SCREEN_WIDTH = 640;
|
||||
const int SCREEN_HEIGHT = 480;
|
||||
|
||||
//Starts up SDL and creates window
|
||||
bool init();
|
||||
|
||||
//Loads media
|
||||
bool loadMedia();
|
||||
|
||||
//Frees media and shuts down SDL
|
||||
void close();
|
||||
|
||||
//The window we'll be rendering to
|
||||
SDL_Window* gWindow = NULL;
|
||||
|
||||
//The surface contained by the window
|
||||
SDL_Surface* gScreenSurface = NULL;
|
||||
|
||||
//The image we will load and show on the screen
|
||||
SDL_Surface* gHelloWorld = NULL;
|
||||
|
||||
bool init(){
|
||||
//Initialization flag
|
||||
bool success = true;
|
||||
|
||||
//Initialize SDL
|
||||
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
|
||||
{
|
||||
printf("SDL could not init! SDL_Error: %s\n", SDL_GetError() );
|
||||
success = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Create window
|
||||
gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
|
||||
if( gWindow == NULL )
|
||||
{
|
||||
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
|
||||
success = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Get window surface
|
||||
gScreenSurface = SDL_GetWindowSurface( gWindow );
|
||||
}
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool loadMedia()
|
||||
{
|
||||
//Loading success flag
|
||||
bool success = true;
|
||||
|
||||
//Load splash image
|
||||
gHelloWorld = SDL_LoadBMP( "images/hello_world.bmp" );
|
||||
if( gHelloWorld == NULL )
|
||||
{
|
||||
printf( "Unable to load image %s! SDL Error: %s\n", "images/hello_world.bmp", SDL_GetError() );
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
void close()
|
||||
{
|
||||
//Deallocate surface
|
||||
SDL_FreeSurface( gHelloWorld );
|
||||
gHelloWorld = NULL;
|
||||
|
||||
//Destroy window
|
||||
SDL_DestroyWindow( gWindow );
|
||||
gWindow = NULL;
|
||||
|
||||
//Quit SDL subsystems
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
int main( int argc, char* args[] )
|
||||
{
|
||||
//Start up SDL and create window
|
||||
if( !init() )
|
||||
{
|
||||
printf( "Failed to init!\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
//Load media
|
||||
if( !loadMedia() )
|
||||
{
|
||||
printf( "Failed to load media!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
//Apply the image
|
||||
SDL_BlitSurface( gHelloWorld, NULL, gScreenSurface, NULL );
|
||||
|
||||
//Update the surface
|
||||
SDL_UpdateWindowSurface( gWindow );
|
||||
|
||||
//Wait two seconds
|
||||
SDL_Delay( 2000 );
|
||||
}
|
||||
}
|
||||
//Free resources and close SDL
|
||||
close();
|
||||
|
||||
return 0;
|
||||
}
|
20
lazyfoodSDL/02_image/Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
#OBJS specifies which files to compile as part of the project
|
||||
OBJS = 02_image.cpp
|
||||
|
||||
#CC specifies which compiler to use
|
||||
CC = clang
|
||||
|
||||
#COMPILER_FLAGS specifies the additional compilation options we're using
|
||||
# -w suppress all warnings
|
||||
COMPILER_FLAGS = -w
|
||||
|
||||
#LINKER_FLAGS specifies the libraries we're linking against
|
||||
LINKER_FLAGS = -lSDL2
|
||||
|
||||
#OBJ_NAME specifies the name of our executable
|
||||
OBJ_NAME= 02_image
|
||||
|
||||
#This is the target that compiles our executable
|
||||
all : $(OBJS)
|
||||
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
||||
|
BIN
lazyfoodSDL/02_image/images/hello_world.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
BIN
lazyfoodSDL/04_keypress/04_keepress
Executable file
20
lazyfoodSDL/04_keypress/Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
#OBJS specifies which files to compile as part of the project
|
||||
OBJS = test.cpp
|
||||
|
||||
#CC specifies which compiler to use
|
||||
CC = g++
|
||||
|
||||
#COMPILER_FLAGS specifies the additional compilation options we're using
|
||||
# -w suppress all warnings
|
||||
COMPILER_FLAGS = -Wall
|
||||
|
||||
#LINKER_FLAGS specifies the libraries we're linking against
|
||||
LINKER_FLAGS = -lSDL2
|
||||
|
||||
#OBJ_NAME specifies the name of our executable
|
||||
OBJ_NAME= 04_keepress
|
||||
|
||||
#This is the target that compiles our executable
|
||||
all : $(OBJS)
|
||||
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
||||
|
BIN
lazyfoodSDL/04_keypress/images/down.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
BIN
lazyfoodSDL/04_keypress/images/hello_world.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
BIN
lazyfoodSDL/04_keypress/images/left.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
BIN
lazyfoodSDL/04_keypress/images/press.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
BIN
lazyfoodSDL/04_keypress/images/right.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
BIN
lazyfoodSDL/04_keypress/images/up.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
BIN
lazyfoodSDL/04_keypress/images/x.bmp
Executable file
After Width: | Height: | Size: 900 KiB |
230
lazyfoodSDL/04_keypress/test.cpp
Normal file
@ -0,0 +1,230 @@
|
||||
/*This source code copyrighted by Lazy Foo' Productions (2004-2015)
|
||||
and may not be redistributed without written permission.*/
|
||||
|
||||
//Using SDL and standard IO
|
||||
#include <SDL2/SDL.h>
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
|
||||
//Screen dimensions
|
||||
const int SCREEN_WIDTH = 640;
|
||||
const int SCREEN_HEIGHT = 480;
|
||||
|
||||
//Key press surfaces constants
|
||||
//enum makes everything a const int
|
||||
//and sets it to numbers sequentaly starting with 0
|
||||
enum KeyPressSurfaces
|
||||
{
|
||||
KEY_PRESS_SURFACE_DEFAULT,
|
||||
KEY_PRESS_SURFACE_UP,
|
||||
KEY_PRESS_SURFACE_DOWN,
|
||||
KEY_PRESS_SURFACE_LEFT,
|
||||
KEY_PRESS_SURFACE_RIGHT,
|
||||
KEY_PRESS_SURFACE_TOTAL
|
||||
};
|
||||
|
||||
//Starts up SDL and creates window
|
||||
bool init();
|
||||
|
||||
//Loads media
|
||||
bool loadMedia();
|
||||
|
||||
//Frees media and shuts down SDL
|
||||
void close();
|
||||
|
||||
//Loads individual image
|
||||
SDL_Surface* loadSurface( std::string path );
|
||||
|
||||
//The window we'll be rendering to
|
||||
SDL_Window* gWindow = NULL;
|
||||
|
||||
//The surface contained by the window
|
||||
SDL_Surface* gScreenSurface = NULL;
|
||||
|
||||
//The images that correspond to a keypress
|
||||
SDL_Surface* gKeyPressSurfaces[ KEY_PRESS_SURFACE_TOTAL ];
|
||||
|
||||
//Current displayed image
|
||||
SDL_Surface* gCurrentSurface = NULL;
|
||||
|
||||
SDL_Surface* loadSurface( std::string path )
|
||||
{
|
||||
//Load image at specified path
|
||||
SDL_Surface* loadedSurface = SDL_LoadBMP( path.c_str() );
|
||||
if( loadedSurface == NULL )
|
||||
{
|
||||
printf( "Unable to load image %s! SDL Error: %s\n", path.c_str(), SDL_GetError() );
|
||||
}
|
||||
|
||||
return loadedSurface;
|
||||
}
|
||||
|
||||
bool init(){
|
||||
//Initialization flag
|
||||
bool success = true;
|
||||
|
||||
//Initialize SDL
|
||||
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
|
||||
{
|
||||
printf("SDL could not init! SDL_Error: %s\n", SDL_GetError() );
|
||||
success = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Create window
|
||||
gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
|
||||
if( gWindow == NULL )
|
||||
{
|
||||
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
|
||||
success = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Get window surface
|
||||
gScreenSurface = SDL_GetWindowSurface( gWindow );
|
||||
}
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool loadMedia()
|
||||
{
|
||||
//Loading success flag
|
||||
bool success = true;
|
||||
|
||||
//Load default surface
|
||||
gKeyPressSurfaces[ KEY_PRESS_SURFACE_DEFAULT ] = SDL_LoadBMP( "images/press.bmp" );
|
||||
if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_DEFAULT ] == NULL )
|
||||
{
|
||||
printf( "Failed to load default image!\n" );
|
||||
success = false;
|
||||
}
|
||||
|
||||
gKeyPressSurfaces[ KEY_PRESS_SURFACE_UP] = SDL_LoadBMP( "images/up.bmp" );
|
||||
if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_UP ] == NULL )
|
||||
{
|
||||
printf( "Failed to load up image!\n" );
|
||||
success = false;
|
||||
}
|
||||
|
||||
gKeyPressSurfaces[ KEY_PRESS_SURFACE_DOWN] = loadSurface( "images/down.bmp" );
|
||||
if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_DOWN ] == NULL )
|
||||
{
|
||||
printf( "Failed to load down image!\n" );
|
||||
success = false;
|
||||
}
|
||||
|
||||
gKeyPressSurfaces[ KEY_PRESS_SURFACE_LEFT] = loadSurface( "images/left.bmp" );
|
||||
if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_LEFT ] == NULL )
|
||||
{
|
||||
printf( "Failed to load left image!\n" );
|
||||
success = false;
|
||||
}
|
||||
|
||||
gKeyPressSurfaces[ KEY_PRESS_SURFACE_RIGHT] = loadSurface( "images/right.bmp" );
|
||||
if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_RIGHT ] == NULL )
|
||||
{
|
||||
printf( "Failed to load right image!\n" );
|
||||
success = false;
|
||||
}
|
||||
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
void close()
|
||||
{
|
||||
//Deallocate surface
|
||||
for ( int i=0; i < KEY_PRESS_SURFACE_TOTAL; ++i )
|
||||
{
|
||||
SDL_FreeSurface( gKeyPressSurfaces[ i ] );
|
||||
gKeyPressSurfaces[ i ] = NULL;
|
||||
}
|
||||
|
||||
//Destroy window
|
||||
SDL_DestroyWindow( gWindow );
|
||||
gWindow = NULL;
|
||||
|
||||
//Quit SDL subsystems
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
int main( int argc, char* args[] )
|
||||
{
|
||||
//Start up SDL and create window
|
||||
if( !init() )
|
||||
{
|
||||
printf( "Failed to init!\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
//Load media
|
||||
if( !loadMedia() )
|
||||
{
|
||||
printf( "Failed to load media!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
//Main loop flag
|
||||
bool quit = false;
|
||||
|
||||
//Event handler
|
||||
SDL_Event e;
|
||||
|
||||
//Set default current surface
|
||||
gCurrentSurface = gKeyPressSurfaces[ KEY_PRESS_SURFACE_DEFAULT ];
|
||||
|
||||
//While application is running
|
||||
while( !quit )
|
||||
{
|
||||
//Handle events on queue
|
||||
while( SDL_PollEvent( &e ) !=0 )
|
||||
{
|
||||
//User requests quit
|
||||
if( e.type == SDL_QUIT )
|
||||
{
|
||||
quit = true;
|
||||
}
|
||||
//User presses a key
|
||||
else if( e.type == SDL_KEYDOWN )
|
||||
{
|
||||
//Select surfaces based on key press
|
||||
switch( e.key.keysym.sym )
|
||||
{
|
||||
case SDLK_UP:
|
||||
gCurrentSurface = gKeyPressSurfaces[ KEY_PRESS_SURFACE_UP ];
|
||||
break;
|
||||
|
||||
case SDLK_DOWN:
|
||||
gCurrentSurface = gKeyPressSurfaces[ KEY_PRESS_SURFACE_DOWN ];
|
||||
break;
|
||||
|
||||
case SDLK_LEFT:
|
||||
gCurrentSurface = gKeyPressSurfaces[ KEY_PRESS_SURFACE_LEFT ];
|
||||
break;
|
||||
|
||||
case SDLK_RIGHT:
|
||||
gCurrentSurface = gKeyPressSurfaces[ KEY_PRESS_SURFACE_RIGHT ];
|
||||
break;
|
||||
|
||||
default:
|
||||
gCurrentSurface = gKeyPressSurfaces[ KEY_PRESS_SURFACE_DEFAULT ];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Apply the current image
|
||||
SDL_BlitSurface( gCurrentSurface, NULL, gScreenSurface, NULL );
|
||||
|
||||
//Update the surface
|
||||
SDL_UpdateWindowSurface( gWindow );
|
||||
}
|
||||
}
|
||||
}
|
||||
//Free resources and close SDL
|
||||
close();
|
||||
|
||||
return 0;
|
||||
}
|
4
learncthehardway/3/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
CFLAGS=-Wall -g
|
||||
|
||||
clean:
|
||||
rm -f ex1
|
BIN
learncthehardway/3/ex3
Executable file
12
learncthehardway/3/ex3.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int age = 10;
|
||||
int height = 72;
|
||||
|
||||
printf("I am %d years old.\n", age );
|
||||
printf("I am %d inches tall.\n", height);
|
||||
|
||||
return 0;
|
||||
}
|
4
learncthehardway/4/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
CFLAGS=-Wall -g
|
||||
|
||||
clean:
|
||||
rm -f ex4
|
BIN
learncthehardway/4/ex4
Executable file
14
learncthehardway/4/ex4.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include <stdio.h>
|
||||
|
||||
/* Warning: This program is wrong on purpose. */
|
||||
|
||||
int main()
|
||||
{
|
||||
int age = 10;
|
||||
int height;
|
||||
|
||||
printf("I am %d years old.\n");
|
||||
printf("I am %d inches tall.\n", height);
|
||||
|
||||
return 0;
|
||||
}
|
BIN
learncthehardway/ex10/a.out
Executable file
23
learncthehardway/ex10/ex10.c
Normal file
@ -0,0 +1,23 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
// go through each string in argv
|
||||
for (i = 1; i < argc; i++) {
|
||||
printf("arg %d: %s\n", i, argv[i]);
|
||||
}
|
||||
|
||||
// Make an array of strings
|
||||
char *states[] = {
|
||||
"California", "Oregon",
|
||||
"Washington", "Texas"
|
||||
};
|
||||
int num_states = 4;
|
||||
|
||||
for (i = 0; i < num_states; i++) {
|
||||
printf("states %d: %s\n", i, states[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
BIN
learncthehardway/ex14/a.out
Executable file
42
learncthehardway/ex14/ex14.c
Normal file
@ -0,0 +1,42 @@
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
// forward declarations
|
||||
int can_print_it(char ch);
|
||||
void print_letters(char arg[]);
|
||||
|
||||
void print_arguments(int argc, char *argv[])
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
for(i = 0; i < argc; i++) {
|
||||
print_letters(argv[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void print_letters(char arg[])
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
for(i = 0; arg[i] != '\0'; i++) {
|
||||
char ch = arg[i];
|
||||
|
||||
if(can_print_it(ch)) {
|
||||
printf("'%c' == %d ", ch, ch);
|
||||
}
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int can_print_it(char ch)
|
||||
{
|
||||
return isalpha(ch) || isblank(ch);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
print_arguments(argc, argv);
|
||||
return 0;
|
||||
}
|
5
learncthehardway/ex9/notes
Normal file
@ -0,0 +1,5 @@
|
||||
instead of doing something like
|
||||
|
||||
char name[4] = "zed"
|
||||
do
|
||||
char *name = "zed"
|
6
learncthehardway/exc1/Makefile
Normal file
@ -0,0 +1,6 @@
|
||||
CFLAGS=-Wall -g
|
||||
|
||||
clean:
|
||||
rm -f ex1
|
||||
all:
|
||||
ex1
|
BIN
learncthehardway/exc1/a.out
Executable file
8
learncthehardway/exc1/ex1.c
Normal file
@ -0,0 +1,8 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
puts("Hello world.");
|
||||
|
||||
return 0;
|
||||
}
|
4
learncthehardway/exc2/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
CFLAGS=-Wall -g
|
||||
|
||||
clean:
|
||||
rm -f ex1
|
25
sdl/first/Makefile
Normal file
@ -0,0 +1,25 @@
|
||||
#OBJS specifies which files to compile as part of the project
|
||||
OBJS = main.c
|
||||
|
||||
#CC specifies which compiler to use
|
||||
CC = clang
|
||||
|
||||
#COMPILER_FLAGS specifies the additional compilation options we're using
|
||||
# -w suppress all warnings
|
||||
COMPILER_FLAGS = -Wall
|
||||
|
||||
#LINKER_FLAGS specifies the libraries we're linking against
|
||||
LINKER_FLAGS = -lSDL
|
||||
|
||||
#OBJ_NAME specifies the name of our executable
|
||||
OBJ_NAME= first
|
||||
|
||||
#This is the target that compiles our executable
|
||||
all : $(OBJS)
|
||||
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
||||
clean :
|
||||
rm euhelp
|
||||
install :
|
||||
cp euhelp /usr/bin
|
||||
uninstall :
|
||||
rm /usr/bin/euhelp
|
BIN
sdl/first/bat.bmp
Normal file
After Width: | Height: | Size: 251 KiB |
BIN
sdl/first/first
Executable file
116
sdl/first/main.c
Normal file
@ -0,0 +1,116 @@
|
||||
#include "SDL/SDL.h"
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
const int WINDOW_WIDTH = 640;
|
||||
const int WINDOW_HEIGHT = 480;
|
||||
const char* WINDOW_TITLE = "SDL Start";
|
||||
|
||||
void drawSprite(SDL_Surface* imageSurface,
|
||||
SDL_Surface* screenSurface,
|
||||
int srcX, int srcY,
|
||||
int dstX, int dstY,
|
||||
int width, int height);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
SDL_Init( SDL_INIT_VIDEO );
|
||||
|
||||
SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0,
|
||||
SDL_HWSURFACE | SDL_DOUBLEBUF );
|
||||
SDL_WM_SetCaption( WINDOW_TITLE, 0 );
|
||||
|
||||
SDL_Surface* bitmap = SDL_LoadBMP("bat.bmp");
|
||||
SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(bitmap->format, 255, 0, 255) );
|
||||
|
||||
int batImageX = 24;
|
||||
int batImageY = 63;
|
||||
int batWidth = 65;
|
||||
int batHeight = 44;
|
||||
|
||||
//bat pos
|
||||
int batX = 100;
|
||||
int batY = 100;
|
||||
|
||||
SDL_Event event;
|
||||
int gameRunning = TRUE;
|
||||
int keysHeld[323] = {FALSE};
|
||||
|
||||
while (gameRunning == TRUE)
|
||||
{
|
||||
// Handle input
|
||||
if (SDL_PollEvent(&event))
|
||||
{
|
||||
if (event.type == SDL_QUIT)
|
||||
{
|
||||
gameRunning = FALSE;
|
||||
}
|
||||
|
||||
if (event.type == SDL_KEYDOWN) {
|
||||
keysHeld[event.key.keysym.sym] = TRUE;
|
||||
}
|
||||
if (event.type == SDL_KEYUP)
|
||||
{
|
||||
keysHeld[event.key.keysym.sym] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( keysHeld[SDLK_ESCAPE] )
|
||||
{
|
||||
gameRunning = FALSE;
|
||||
}
|
||||
if (keysHeld[SDLK_LEFT] )
|
||||
{
|
||||
batX -= 1;
|
||||
}
|
||||
if (keysHeld[SDLK_RIGHT] )
|
||||
{
|
||||
batX += 1;
|
||||
}
|
||||
if (keysHeld[SDLK_UP])
|
||||
{
|
||||
batY -= 1;
|
||||
}
|
||||
if (keysHeld[SDLK_DOWN])
|
||||
{
|
||||
batY += 1;
|
||||
}
|
||||
|
||||
// Draw scene
|
||||
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
|
||||
|
||||
drawSprite(bitmap,
|
||||
screen,
|
||||
batImageX, batImageY,
|
||||
batX, batY,
|
||||
batWidth, batHeight);
|
||||
SDL_Flip(screen);
|
||||
}
|
||||
|
||||
SDL_FreeSurface(bitmap);
|
||||
SDL_Quit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void drawSprite(SDL_Surface* imageSurface,
|
||||
SDL_Surface* screenSurface,
|
||||
int srcX, int srcY,
|
||||
int dstX, int dstY,
|
||||
int width, int height)
|
||||
{
|
||||
SDL_Rect srcRect;
|
||||
srcRect.x = srcX;
|
||||
srcRect.y = srcY;
|
||||
srcRect.w = width;
|
||||
srcRect.h = height;
|
||||
|
||||
SDL_Rect dstRect;
|
||||
dstRect.x = dstX;
|
||||
dstRect.y = dstY;
|
||||
dstRect.w = width;
|
||||
dstRect.h = height;
|
||||
|
||||
SDL_BlitSurface(imageSurface, &srcRect, screenSurface, &dstRect);
|
||||
}
|
22
structus/Makefile
Normal file
@ -0,0 +1,22 @@
|
||||
#OBJS specifies which files to compile as part of the project
|
||||
OBJS = main.c
|
||||
|
||||
#CC specifies which compiler to use
|
||||
CC = clang
|
||||
|
||||
#COMPILER_FLAGS specifies the additional compilation options we're using
|
||||
# -w suppress all warnings
|
||||
COMPILER_FLAGS = -Wall
|
||||
|
||||
#LINKER_FLAGS specifies the libraries we're linking against
|
||||
LINKER_FLAGS =
|
||||
|
||||
#OBJ_NAME specifies the name of our executable
|
||||
OBJ_NAME= struct
|
||||
|
||||
#This is the target that compiles our executable
|
||||
all : $(OBJS)
|
||||
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
||||
clean :
|
||||
rm struct
|
||||
|
43
structus/main.c
Normal file
@ -0,0 +1,43 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int gain(int current, int amount_gained);
|
||||
|
||||
void gain_by_pointer(int *current, int amount_gained);
|
||||
|
||||
int main(){
|
||||
struct players{
|
||||
int life;
|
||||
int magic;
|
||||
};
|
||||
|
||||
struct players player1;
|
||||
player1.life = 5;
|
||||
player1.magic = 0;
|
||||
printf(" Hi\n player1's life is currently: %d\n", player1.life);
|
||||
printf(" player1's magic is currently: %d\n", player1.magic);
|
||||
|
||||
player1.magic = gain(player1.magic, 5);
|
||||
player1.life = gain(player1.life, 32);
|
||||
|
||||
printf("\n player1's new magic is %d: \n", player1.magic);
|
||||
|
||||
printf(" player1's new life is %d: \n", player1.life);
|
||||
|
||||
printf(" Adding 1 to both life and magic through pointer magic! \n");
|
||||
|
||||
gain_by_pointer(&player1.magic, 1);
|
||||
gain_by_pointer(&player1.life, 1);
|
||||
|
||||
printf("\n Thanks to pointer magic, life is now %d, magic is now, %d\n", player1.life, player1.magic);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void gain_by_pointer(int *current, int amount_gained){
|
||||
*current += amount_gained;
|
||||
}
|
||||
int gain(int current, int amount_gained){
|
||||
int new_current;
|
||||
new_current = current + amount_gained;
|
||||
return new_current;
|
||||
}
|