Red de conocimiento del abogados - Respuesta jurídica de la empresa - Cómo hacer un juego simple e interesante usando C

Cómo hacer un juego simple e interesante usando C

1. Más sencillo:

Los extranjeros llaman a este juego Toros y Vacas (Toros es A, Vacas es B).

Usando C, se puede escribir así:

#include lt; iostreamgt

#include stringgt; #include lt;sstreamgt;

#include lt;setgt;

#include lt;cstdlibgt;

#include lt;ctimegt; p>usando el espacio de nombres std;

// Devuelve toros y vacas puntuados por conjetura en númerosecreto

string bullsAndCows( conjetura sin firmar, número secreto sin firmar ) {

stringstream. ssGuess,

p>

ssNúmeroSecreto lt; lt; adivinar

ssNúmero Secreto lt; > string strGuess( ssGuess.str( ) ),

strSecretNumber( ssSecretNumber.str( ) );

toros sin firmar = 0,

vacas = 0,

i;

for ( i = 0; i lt; strSecretNumber.length( ); i ) // contar toros

if ( strSecretNumber[ i ] == strGuess[ i ] ) {

toros;

strGuess.erase( i, 1 ); // borrar para facilitar

strSecretNumber.erase( i , 1 ); // conteo de vacas

--i;

}

for ( i = 0; i lt; strSecretNumber.length( ); i ) // contar vacas

if ( strGuess.find( strSecretNumber[ i ] ) != string::npos ) {

vacas;

strGuess. borrar( strGuess.find( strNúmeroSecreto[ i ] ), 1

strNúmeroSecreto.erase( i, 1

--i;

}

return string( 1, '0' toros ) string( 1, '0' vacas

}

// Devuelve verdadero si n es); positivo, 4 dígitos, no contiene 0 o dígitos repetidos

bool isValidInput( int n ) {

stringstream

ss lt; ;

cadena s = ss.str( );

devolver 1000 lt; = n amp; n lt = 9999 amp; s.find( '0' ) == cadena: :npos amp;

setlt;chargt; ( s.begin( ), s.end( ) ).size() == 4; p>

}

void main() {

// selecciona un número secreto aleatorio válido

srand( time( NULL )

númerosecreto sin firmar = 0;

while ( ! isValidInput( númerosecreto ) )

númerosecreto = rand()

for ( conjetura sin signo = 0; 0, conjeturas = 1; conjetura != númerosecreto; conjeturas ) {

cout lt;lt; "Tu conjetura (#" lt;lt; conjeturas lt;lt; "): "; p>

entrada de cadena;

cin gt; entrada

if ( input.length() != 4 ||

! ( stringstream(entrada) gt; adivinar ) || isValidInput( adivinar ) ) {

cout lt "\n\tError: la entrada debe ser positiva -número de dígitos sin "

"0 o dígito repetido.\n\n";

--guessCount;

continuar;

}

string torosCows = torosAndCows( supongo,

número secreto );

cout lt; "\tA: " lt; torosVacas[ 0 ] lt; \n";

}

cout lt; lt; "\n\t¡Lo tienes!\n\n";

}

Para uno más complicado, gobang:

#include "stdafx.h"

#include stdio.hgt;

# incluir lt; math.hgt;

//?HINSTANCE hInst;

ajedrez HBITMAP[2]; >

HWND hWnd;

DWORD tPre, tNow;

int board[10][10]

bool ptab[10][10] [192];

bool ctab[10][10][192];

int win[2][192];

int num[2 ];

bool turn,over;

int ganador;

//ㄧΑ

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void MyPaint(HDC hdc);

void InitGame();

void ComTurn();

//****?祘Α**** ******** **************************

int APIENTRY WinMain(HINSTANCE hInstance,

p>

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

MSG msg;

MyRegisterClass (hInstance);

// libra《?﹍てㄧΑ

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE

}

//De la mano

while( msg.message!=WM_QUIT )

{

if( PeekMessage( amp; msg, NULL, 0, 0, PM_REMOVE) )

{<

/p>

TranslateMessage(amp;msg);

DispatchMessage(amp;msg);

}

más

{

tNow = GetTickCount();

if(tNow-tPre gt; = 100)

MyPaint(hdc); }

}

return msg.wParam;

}

//****)竡の¿Padre? ㄧΑ************************

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW

wcex.lpfnWndProc = ( WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0

wcex.hInstancia = hInstancia

wcex.hIcon = NULL;

wcex.hCursor = NULL;

wcex.hbrBackground = (HBRUSH); )(COLOR_WINDOW 1);

wcex.lpszMenuName = NULL;

wcex.lpszClassName = "lienzo";

wcex.hIconSm = NULL;

return RegisterClassEx(amp;wcex);

}

//****?﹍ㄧΑ*************** *** *******************************

// InitGame() ㄧΑ秨﹍ Pila Ы

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

mosaico HBITMAP, bmp

int rowNum, colNum; /p>

int i, x, y;

hInst = hInstancia;

hWnd = CreateWindow("lienzo", WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)

{

devuelve FALSO;

}

> MoveWindow(hWnd, 10, 10, 480, 520, verdadero);

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd); = GetDC(hWnd);

mdc = CreateCompatibleDC(hdc);

bufdc = CreateCompatibleDC(hdc

bmp = CreateCompatibleBitmap(hdc, 450, 450); );

SelectObject(mdc, bmp);

mosaico = (HBITMAP)LoadImage(NULL, "tile.bmp", IMAGE_BITMAP, 45, 45, LR_LOADFROMFILE

ajedrez[0] = (HBITMAP)LoadImage(NULL, "ajedrez0.bmp", IMAGE_BITMAP, 38, 38, LR_LOADFROMFILE);

ajedrez[1] = (HBITMAP)LoadImage(NULL, "ajedrez1.bmp", IMAGE_BITMAP, 38, 38, LR_LOADFROMFILE);

para (i=0; ilt; 100; i )

{

número de fila = i / 10;

numcol = i 10;

x = numcol * 45

y = numfil * 45; SelectObject(bufdc, mosaico);

BitBlt(mdc, x, y, 45, 45, bufdc, 0, 0, SRCCOPY

}

); InitGame();

MyPaint(hdc);

devuelve VERDADERO

}

//****¿Chimenea? ㄧΑ******************************************

/ / 1.瞞) ¿Cadena de pila?﹍?篈の丽scale?ず甧

// 2.∕)?よ

void InitGame()

{

int i, j, k;

int recuento=0;

over = false

num[0] = num[1] = 0;

//砞)?producir甔筭福?利cabina de escala?い?Stack?cálculo

for(i=0;ilt;192; i)

{

ganar[0][i] = 0

ganar[1][i] = 0

}

///?﹍て¿Cadena de chimenea?篈

for(i=0;ilt;10;i)

for(j=0; jlt;10; j )

board[i][j] = 2;

//瞞)?キよ里 ¿Cabina de escala?

for( i=0; ilt; 10; i )

para(j=0; jlt; 6; j )

{

para(k=

0; klt; 5; k )

{

ptab[i][j k][cuenta] = verdadero;

ctab[i][j k] [count] = true;

}

count ;

}

//¿Qué es la cabina de báscula?

para(i=0;ilt;10;i)

para(j=0;jlt;6;j)

{

para (k=0;klt;5;k)

{

ptab[j k][i][count] = verdadero;

ctab[j k ] [i][recuento] = verdadero;

}

recuento

}

//瞞)タ簸à絬よ¿Cabina de escala Li?

for(i=0;ilt;6;i)

for(j=0;jlt;6;j)

{

for(k=0;klt;5;k)

{

ptab[j k][i k][count] = true;

p>

ctab[j k][i k][count] = true;

}

count

}

//瞞)は簸à絬よ利 ¿Cabina de escala?

for(i=0;ilt;6;i)

for(j=9;jgt ;=4; j--)

{

for(k=0;klt;5;k)

{

ptab[j-k] [i k][count] = verdadero;

ctab[j-k][i k][count] = true;

}

recuento;

}

//Ver el plan∕)パê?よStack?

srand(GetTickCount());

if (rand()2 == 0)

giro = verdadero

else

giro = falso

}

/ /****筿福ㄧΑ************************************ ******

// 1.璸hengliscaleだmeasure

// 2. 匡気成ㄎ?缼缼《波?

void ComTurn( )

{

int calificaciones[2][10][10];

int m, n, i, max=0

;

int u, v;

for(m=0;mlt;10;m)

for(n=0;nlt;10;n)

{

calificaciones[0][m][n] = 0;

calificaciones[1][m][n] =

if(tablero[m][ n] == 2)

{

for(

i=0; ilt; 192; i )

{

//璸heng?出款 ¿Pila?利escalaだmedida

if(ptab[m] ] [n][i] amp; ganar[0][i] != 7)

{

cambiar(ganar[0][i])

{

caso 0:

grados[0][m][n] =1

descanso

caso 1:

calificaciones[0][m][n] =200;

descanso

caso 2:

calificaciones [0][m][n] =400;

descanso

caso 3:

calificaciones[0][m][n] = 2000 ;

ruptura;

caso 4:

calificaciones[0][m][n] =10000;

ruptura;

}

}

//璸heng筭福管?利赐plan

if(ctab[m][n] [i] amplificador; ganar[1][i] != 7)

{

cambiar(ganar[1][i])

{

caso 0:

calificaciones[1][m][n] =1

descanso

caso 1:

calificaciones[1][m][n] =220;

ruptura

caso 2:

calificaciones[1] [m][n] =420;

descanso

caso 3:

grados[1][m][n] =2100; p>

p>

descanso;

caso 4:

grados[1][m][n] =20000

descanso;

}

}

}

si(max == 0)

{

u = m;

v = n;

}

if(grados[0][m][n] gt; max)

{

max = grados[0][m][n];

u = m

v = n;

}

else if(grados[0][m][n] == máx.

)

{

if(grados[1][m][n] gt; grados[1][u][v])

{

u = m;

v = n;

}

}

if(grados[1] [m][n] gt; max)

{

max = grados[1][m][n];

u = m;

v = n;

}

else if(grados[1][m][n] == máx)

{

if(grados[0][m][n] gt; grados[0][u][v])

{

u = m ;

v = n;

}

}

}

}

placa[u][v] = 1; //瞞)?筭福?Stack?

num[1];

if(num[0] == 50 amperios ;amp; num[1] == 50)

{

ganador = 2; //キも

over = true;

}

else

for(i=0;ilt;192;i)

{

if(ctab[u ][v][i])

{

ganar[1][i] ;

ptab[u][v][i] = falso ;

ganar[0][i] = 7;

if(ganar[1][i] == 5)

{

ganador = 1;

over = verdadero

}

}

}

turno = true; //¿Aprobado?Producción?

}

//****?璹璹素瓜ㄧΑ*************** * *******************

// ¿Qué me pasa?

void MyPaint(HDC hdc)

{

int m, n;

char *str

if(over)

{

>

switch(winner)

{

caso 0:

str = "礤 ¿Tumba? ! F1 睝缼《紴兰. . ";

break;

caso 1:

str = "¿Tumba de Xiao Fu? ! F1 Zhong Xian "笴 LAN..";

break;

caso 2:

str = "ぃだsello de escala! F1 睝缼《笴兰..";

break; >

}

<

p> TextOut(hdc, 10, 470, str, strlen(str));

}

else if(!turn) //筿福

{

str = "筿福?σい... ";

TextOut(hdc, 10, 470, str, strlen(str)); > ComTurn();

}

else

{

str = "赣礤... ";

TextOut(hdc, 10, 470, str, strlen(str)

}

for(m=0;mlt;10;m)

for(n=0; nlt; 10; n )

{

if(board[m][n] == 0) //¿Cuál es el problema?

{

SeleccionarObjeto(bufdc, ajedrez[0]);

BitBlt(mdc, m*45 3, n*45 3, 38, 38, bufdc , 0, 0, SRCCOPY);

}

else if(board[m][n] == 1) //禟?筭福庄?

{

SelectObject(bufdc, ajedrez[1]);

BitBlt(mdc, m*45 3, n*45 3, 38, 38, bufdc, 0, 0 , SRCCOPY);

}

else //禟?

{

SelectObject(bufdc,chess[1]);

BitBlt(mdc, m*45 3, n*45 3, 38, 38, bufdc, 0, 0, BLANCO

}

}

BitBlt(hdc, 10, 10, 450, 450, mdc, 0, 0, SRCCOPY);

tPre = GetTickCount()

}< / p>

//****窪?窪瞆ㄧΑ********************************* **** **

// 1. ¿Edad F1?

LRESULT CALLBACK WndProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM lParam)

{

int x, y, m, n, i;

switch (mensaje)

{

case WM_KEYDOWN: // La edad es flat?

switch (wParam)

{

case VK_ESCAPE: // Esc edad

PostQuitMessage( 0 );

descanso

caso VK_F1: // edad F1

InitGame();

break;

}

case WM_LBUTTONDOWN: //¿El público filipino es viejo?

if(!over)

if(turn)

{

x = LOWORD(lParam); //?眔飞公X畒clip

y = HIWORD(lParam); /?眔飞公Y畒clip

if(x gt; 10 amp; amp; x lt; 460 amp; amp; ygt; 10 amp; amp; y lt; 460)

{

m = (int)piso((x-10)/45);

n = (int)piso((y-10)/45);

if(board[m][n] == 2)

{

board[m][n] = 0 //Cuál es el resultado; ? ¿Chimenea?

num[0];

if(num[0] == 50 amp; num[1] == 50)

{

ganador = 2; //キも

over = true;

}

else

para ( i=0; ilt; 192; i )

{

si(ptab[m][n][i])

{

ganar[0][i];

ctab[m][n][i] = falso

ganar[1][i] = 7;

p>

if(win[0][i] == 5)

{

ganador = 0

over = true

p>

}

}

}

turn = false; // ¿Predicar bendiciones?

}

}

}

descanso

caso WM_DESTROY: //¿Desinflado?

EliminarDC( mdc); /p>

EliminarDC(bufdc);

EliminarObjeto(ajedrez[0]);

EliminarObjeto(ajedrez[1]); hWnd, hd

c);

PostQuitMessage(0);

break;

default: //ㄤウplano?

return DefWindowProc(hWnd). , mensaje, wParam, lParam);

}

devuelve 0;