Created
February 11, 2017 15:05
-
-
Save Alynva/e78976707d140695386501e4004b0e6e to your computer and use it in GitHub Desktop.
Jogo da Memória em CGI
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <time.h> | |
#define QTDNUMBERS 5 | |
void getName(char[], char[]); | |
int main() { | |
int i; | |
char *dados = NULL; | |
FILE *lf; | |
char fileName[50] = {""}; | |
char user[50]; | |
char allNumbers[20 * QTDNUMBERS]; | |
int numbers[QTDNUMBERS]; | |
srand(time(NULL)); | |
for (i = 0; i < QTDNUMBERS; i++) { | |
numbers[i] = rand() % 100; | |
} | |
int myNumbers[QTDNUMBERS]; | |
for (i = 0; i < QTDNUMBERS; i++) { | |
myNumbers[i] = 0; | |
} | |
int passo = 0; | |
char inputType[10] = "text"; | |
int acertos = 0; | |
dados = getenv("QUERY_STRING"); | |
if (sscanf(dados, "abo=brinha&user=%s", user) == 1) { | |
// Iniciando o jogo | |
passo = 0; | |
getName(user, fileName); | |
lf = fopen(fileName, "wt"); | |
for (i = 0; i < QTDNUMBERS; i++) { | |
fprintf(lf, "%d ", numbers[i]); | |
} | |
fclose(lf); | |
} else if (sscanf(dados, "user=%[^&]&%s", user, allNumbers) == 2) { | |
// Checando se os números inseridos coincidem | |
passo = 2; | |
getName(user, fileName); | |
lf = fopen(fileName, "rt"); | |
for (i = 0; i < QTDNUMBERS; i++) { | |
fscanf(lf, "%d ", &numbers[i]); | |
} | |
i = 0; | |
char *pch = strtok(allNumbers, "&myNumber="); | |
while (pch != NULL) { | |
pch = strtok(NULL, "&myNumber="); | |
myNumbers[i] = atoi(pch); | |
i++; | |
pch = strtok(NULL, "&myNumber="); | |
} | |
for (i = 0; i < QTDNUMBERS; i++) | |
if (numbers[i] == myNumbers[i]) | |
acertos++; | |
fclose(lf); | |
} else if (sscanf(dados, "user=%s", user) == 1) { | |
// Recuperando os número do arquivo | |
passo = 1; | |
getName(user, fileName); | |
lf = fopen(fileName, "rt"); | |
for (i = 0; i < QTDNUMBERS; i++) { | |
fscanf(lf, "%d ", &numbers[i]); | |
} | |
fclose(lf); | |
} else { | |
// Não entrou com nenhum parâmetro na URL | |
passo = -1; | |
} | |
printf("Content-type:text/html;charset=UTF-8%c%c\n", 13, 10); | |
printf("<html>"); | |
printf("<head>"); | |
printf("<meta charset=\"utf-8\">"); | |
printf("<meta name=\"author\" content=\"Alisson Nunes\">"); | |
printf("<meta name=\"reply-to\" content=\"[email protected]\">"); | |
printf("<meta name=\"generator\" content=\"Dev-C++ 5.11\">"); | |
printf("<meta http-equiv=\"content-language\" content=\"pt-br\">"); | |
printf("<meta name=\"description\" content=\"Um jogo simples, com a mecânica programada em Lingaugem C.\">"); | |
if (passo == 0) | |
printf("<meta http-equiv=\"refresh\" content=\"5; url=?user=%s\">", user); | |
else if (passo == -1) | |
printf("<meta http-equiv=\"refresh\" content=\"0; url=../jogo-da-memoria.html\">"); | |
printf("<title>Jogo da memoria</title>"); | |
printf("<link rel=\"stylesheet\" href=\"../jogo-da-memoria.css\">"); | |
printf("</head>"); | |
printf("<body>"); | |
if (passo >= 0) { | |
printf("<a href=\"../jogo-da-memoria.html\">Voltar</a>"); | |
printf("<form action=\"\">"); | |
if (passo != 0 && acertos != QTDNUMBERS) { | |
strcpy(inputType, "hidden"); | |
printf("<input type=\"hidden\" name=\"user\" value=\"%s\">", user); | |
} | |
for (i = 0; i < QTDNUMBERS; i++) { | |
printf("<input class=\"theNumber\" type=\"%s\" name=\"theNumber%d\" value=\"%i\" disabled>", inputType, i, numbers[i]); | |
} | |
if (passo != 0 && acertos == QTDNUMBERS) | |
printf("<br>"); | |
for (i = 0; i < QTDNUMBERS; i++) { | |
if (passo != 0) { | |
printf("<input class=\"myNumber"); | |
if (passo == 2) { | |
if (myNumbers[i] == numbers[i]) | |
printf(" acerto"); | |
else | |
printf(" erro"); | |
} | |
printf("\" type=\"number\""); | |
if (acertos == QTDNUMBERS) | |
printf(" disabled"); | |
printf(" name=\"myNumber%d\" value=\"%d\">", i, myNumbers[i]); | |
} | |
} | |
if (passo != 0 && acertos != QTDNUMBERS) | |
printf("<br><input type=\"submit\" value=\"Tentar\">"); | |
printf("</form>"); | |
if (passo == 2) { | |
printf("<span class=\"result\">"); | |
if (acertos == QTDNUMBERS) | |
printf("Uau! Você acertou todos!"); | |
else if (acertos > QTDNUMBERS / 2) | |
printf("Uia, foi quase."); | |
else if (acertos == 0) | |
printf("Que pena, você errou todos."); | |
else | |
printf("Você precisa melhorar, passou longe!"); | |
printf("</span>"); | |
} | |
printf("<a href=\"jogo-da-memoria.cgi?abo=brinha&user=%s\">Recomeçar</a>", user); | |
} | |
printf("</body>"); | |
printf("</html>"); | |
return 0; | |
} | |
void getName(char user[], char name[]) { | |
strcat(name, "jogo-da-memoria-"); | |
strcat(name, user); | |
strcat(name, ".txt"); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* { | |
background-repeat: no-repeat; | |
box-sizing: border-box; | |
font-family: sans-serif; | |
} | |
body { | |
margin: 0; | |
background-color: rgba(60,80,112,1); | |
background-image: | |
radial-gradient(100% 100%, rgba(255,255,255,.7) 0%, transparent 50%); | |
background-size: | |
700px 525px; | |
background-position: | |
50% calc(50% + 20px); | |
text-align: center; | |
padding: 12px; | |
} | |
a { | |
position: absolute; | |
top: 12px; | |
text-decoration: none; | |
color: rgba(255,255,255,.7); | |
text-transform: uppercase; | |
background-color: rgba(0,0,0,.2); | |
padding: 6px; | |
transition: background-color .6s, color .6s; | |
} | |
a:first-of-type { | |
left: 16px; | |
} | |
a:last-of-type { | |
right: 16px; | |
} | |
a:hover { | |
color: #fff; | |
background-color: rgba(0,0,0,.5); | |
} | |
input { | |
margin: 0; | |
border: 0; | |
padding: 8px; | |
cursor: pointer; | |
box-shadow: 0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2); | |
transition: background-color .6s, color .6s; | |
vertical-align: middle; | |
} | |
input[type="text"], input[type="number"] { | |
cursor: auto; | |
} | |
input[type="submit"]:hover { | |
cursor: pointer; | |
background-color: #666; | |
color: #ddd; | |
} | |
input.myNumber, input.theNumber { | |
width: 60px; | |
text-align: center; | |
} | |
input.myNumber:not([disabled]):hover { | |
background-color: transparent; | |
color: white; | |
} | |
input.myNumber.acerto { | |
border-bottom: 3px solid green; | |
} | |
input.myNumber.erro { | |
border-bottom: 3px solid red; | |
} | |
input.theNumber { | |
background-color: #ccc; | |
} | |
input[type="submit"][value="Tentar"] { | |
width: 300px; | |
} | |
span { | |
color: #fff; | |
margin: .5em; | |
display: block; | |
font-weight: bolder; | |
font-size: 1.3em; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="author" content="Alisson Nunes"> | |
<meta name="reply-to" content="[email protected]"> | |
<meta name="generator" content="Sublime Text 2"> | |
<meta http-equiv="content-language" content="pt-br"> | |
<meta name="description" content="Um jogo simples, com a mecânica programada em Lingaugem C."> | |
<title>Jogo da memoria</title> | |
<link rel="stylesheet" href="jogo-da-memoria.css"> | |
</head> | |
<body> | |
<form method="get" action="cgi-bin/jogo-da-memoria.cgi"> | |
<input type="hidden" name="abo" value="brinha"> | |
<input type="text" name="user" autofocus autocomplete="off" placeholder="Nome do Jogador"><input type="submit" value="Começar"> | |
</form> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment