Share touch-and-touch game source code in C Language

Source: Internet
Author: User
Tags random seed

Share touch-and-touch game source code in C Language

The examples in this article share with you the specific code of the C language for your reference. The specific content is as follows:

//////////////////////////////////////// ///

// X and y of the material are reversed, because x represents a row, but x represents a column, and y is the same

//////////////////////////////////////// ///

#include

#include

#include

#include

#include

#include

#pragma comment (lib, "Winmm.lib")

using namespace std;

/ *************** Define the enum type ***************** /

enum color {blank, red, yellow, blue, green, white, orange, purple, shizijia, zhadan, qicai, alarm};

/ *************** Define global variables *************** /

const int MaxT = 12; // time limit

const int T = 10 * MaxT; // speed of time

const int V = 300; // dwell time

clock_t start, now; // control time

color gem [9] [8]; // map

// IMAGE object

IMAGE img [12], music_img [2], exit_img, jindutiao;

int Score, Time; // score time

bool Flag, Music = true; // Whether to load music

/ ******************* Function declaration ****************** /

void load (void); // load IMAGE object

void Blank (void); // clear

bool soso (void); // search for spaces

bool baidu (void); // search solution

void New (void); // update

void print (void); // output

bool judge (void); // determine whether it can be eliminated

void fall (void); // fall

void draw (void); // eliminate

bool quit (void); // whether to restart

void play (void); // game process

/ ******************** Definition function ****************** /

void load (void)

{

char c [20];

int i;

// load IMAGE object

for (i = 0; i <12; i ++)

{

ostrstream strout (c, 50);

strout << "picture \\" <

loadimage (& img [i], c);

}

loadimage (& music_img [0], "Picture \ Music.jpg");

loadimage (& music_img [1], "Picture \\ 音乐 开 .jpg");

loadimage (& exit_img, "Image \\ Exit.jpg");

loadimage (& jindutiao, "Image \\ Progress bar.jpg");

// load music

mciSendString ("open background music.mp3 alias mymusic", NULL, 0, NULL);

// random seed

srand (unsigned (time (NULL)));

// open a file

ifstream fin ("archive.dat");

if (! fin)

throw -1; // throw exception if opening fails

// read archive

fin >> Flag >> Music;

if (Flag)

{

HWND wnd = GetHWnd ();

SetWindowText (wnd, "Right to Touch");

if (MessageBox (wnd, "Continue to the last game?", "Game start", MB_YESNO | MB_ICONQUESTION) == IDYES)

{

fin >> Score >> Time;

for (i = 0; i <9; i ++)

for (int j = 0; j <8; j ++)

{

int t;

fin >> t;

gem [i] [j] = color (t);

}

}

else

Flag = false;

}

fin.close ();

}

void Blank (void)

{

for (int i = 1; i <9; i ++)

for (int j = 0; j <8; j ++)

gem [i] [j] = blank;

print ();

fall ();

}

bool soso (void)

{

for (int i = 1; i <9; i ++)

for (int j = 0; j <8; j ++)

if (gem [i] [j] == blank)

return true;

return false;

}

bool baidu (void)

{

int i, j;

color t;

bool flag = false;

// return true if there is a prop

for (i = 1; i <9; i ++)

for (j = 0; j <8; j ++)

if (gem [i] [j]> = shizijia)

return true;

// search solution

for (i = 1; i <9; i ++)

for (j = 0; j <7; j ++)

{

t = gem [i] [j];

gem [i] [j] = gem [i] [j + 1];

gem [i] [j + 1] = t;

if (judge ())

flag = true;

t = gem [i] [j];

gem [i] [j] = gem [i] [j + 1];

gem [i] [j + 1] = t;

if (flag)

return true;

}

for (i = 1; i <7; i ++)

for (j = 0; j <8; j ++)

{

t = gem [i] [j];

gem [i] [j] = gem [i + 1] [j];

gem [i + 1] [j] = t;

if (judge ())

flag = true;

t = gem [i] [j];

gem [i] [j] = gem [i + 1] [j];

gem [i + 1] [j] = t;

if (flag)

return true;

}

return false;

}

void New (void)

{

static int old_score = -1, old_time = T;

bool flag = false;

if (Score! = old_score) // update score

{

if (Score> 999999999)

{

if (MessageBox (GetHWnd (), "Congratulations on reaching the highest score! \ nDo you want to start over?", "Game Over", MB_YESNO | MB_ICONQUESTION) == IDYES)

Score = 0;

else

exit (0);

}

char s [15];

ostrstream strout (s, 15);

strout << '$' <

setfont (30, 0, "Microsoft Yahei");

setcolor (RGB (255, 128, 0));

outtextxy (480, 60, s);

old_score = Score;

flag = true;

}

if (Time! = old_time) // update time

{

if (Time> old_time)

putimage (540, 140, & jindutiao);

setcolor (BLACK);

for (int i = 0; i <T-Time; i ++)

{

line (540, 140 + 2 * i, 580, 140 + 2 * i);

line (540, 140 + 2 * i + 1, 580, 140 + 2 * i + 1);

}

old_time = Time;

flag = true;

}

if (flag) // write archive

{

ofstream fout ("Archive.dat");

fout <

<

<

<


for (int i = 0; i <9; i ++)

{

for (int j = 0; j <8; j ++)

fout <

fout <

}

fout.close ();

}

}

void print (void)

{

int i, j;

for (i = 1; i <9; i ++)

for (j = 0; j <8; j ++)

putimage (60 * j, 60 * (i-1), & img [int (gem [i] [j])]);

New ();

}

bool judge (void)

{

int i, j;

for (i = 1; i <9; i ++)

for (j = 0; j <6; j ++)

if (gem [i] [j] == gem [i] [j + 1] && gem [i] [j] == gem [i] [j + 2])

return true;

for (i = 1; i <7; i ++)

for (j = 0; j <8; j ++)

if (gem [i] [j] == gem [i + 1] [j] && gem [i] [j] == gem [i + 2] [j])

return true;

return false;

}

void fall (void)

{

{

int i, j, a [8] = {0};

bool sign = false;

for (j = 0; j <8; j ++)

for (i = 8; i> = 1; i--)

if (gem [i] [j] == blank)

{

a [j] = i;

sign = true;

break;

}

if (sign == false)

return;

IMAGE im [8];

for (j = 0; j <8; j ++)

if (a [j]> 1)

getimage (& im [j], 60 * j, 0, 60, 60 * (a [j]-1));

for (i = 0; i <60; i + = 2)

for (j = 0; j <8; j ++)

if (a [j]> 0)

{

if (a [j]> 1)

putimage (60 * j, i + 2, & im [j]);

putimage (60 * j, i + 2-60, & img [int (gem [0] [j])]);

Sleep (1);

}

for (j = 0; j <8; j ++)

if (a [j]> 0)

{

for (i = a [j]; i> 0; i--)

gem [i] [j] = gem [i-1] [j];

if (rand ()% 50 == 0)

gem [0] [j] = color (rand ()% 4 + 8);

else

gem [0] [j] = color (rand ()% 7 + 1);

}

} // add braces to undo memory space during recursion

if (soso ())

fall ();

if (judge ())

draw ();

}

void draw (void)

{

{

int i, j;

bool a [9] [8] ={false};

for (i = 1; i <9; i ++)

for (j = 0; j <6; j ++)

if (gem [i] [j] == gem [i] [j + 1] && gem [i] [j] == gem [i] [j + 2])

a [i] [j] = a [i] [j + 1] = a [i] [j + 2] = true;

for (i = 1; i <7; i ++)

for (j = 0; j <8; j ++)

if (gem [i] [j] == gem [i + 1] [j] && gem [i] [j] == gem [i + 2] [j])

a [i] [j] = a [i + 1] [j] = a [i + 2] [j] = true;

for (i = 1; i <9; i ++)

for (j = 0; j <8; j ++)

if (a [i] [j])

{

gem [i] [j] = blank;

Score + = 10;

}

Sleep (V);

Time + = T / MaxT;

if (Time> T)

Time = T;

print ();

} // add braces to undo memory space during recursion

fall ();

}

bool quit (void)

{

char str [50];

ostrstream strout (str, 50);

strout << "Score:" <

if (MessageBox (GetHWnd (), str, "Game Over", MB_YESNO | MB_ICONQUESTION) == IDYES)

return true;

return false;

}

void play (void)

{

MOUSEMSG m;

int i, j, x, y, x1, y1;

char fx;

color t;

bool sign;

if (Flag == false)

{

do

{

for (i = 0; i <9; i ++)

for (j = 0; j <8; j ++)

gem [i] [j] = color (rand ()% 7 + 1);

} while (judge () ||! baidu ());

Score = 0;

Time = T;

}

setbkcolor (BLACK);

cleardevice ();

setfont (30, 0, "Microsoft Yahei");

setcolor (RGB (255, 128, 0));

outtextxy (480, 60, "$ 0");

putimage (480, 400, & music_img [int (Music)]);

putimage (560, 400, & exit_img);

putimage (540, 140, & jindutiao);

print ();

now = start = clock ();

Flag = true;

do

{

if (soso ())

fall ();

fx = 0;

sign = true;

while (true)

{

if (MouseHit ())

{

m = GetMouseMsg ();

x1 = m.x;

y1 = m.y;

if (m.uMsg == WM_LBUTTONDOWN)

{

if (x1 <480)

{

x = y1 / 60 + 1;

y = x1 / 60;

switch (gem [x] [y])

{

case shizijia:

for (i = 1; i <9; i ++)

{

gem [i] [y] = blank;

Score + = 10;

}

for (j = 0; j <8; j ++)

{

gem [x] [j] = blank;

Score + = 10;

}

Score-= 20;

Time + = T / MaxT;

if (Time> T)

Time = T;

print ();

Sleep (V);

fall ();

if (! baidu ())

Blank ();

break;

case zhadan:

if (x> 1)

{

gem [x-1] [y] = blank;

Score + = 10;

if (y> 0)

{

gem [x-1] [y-1] = blank;

Score + = 10;

}

}

if (y> 0)

{

gem [x] [y-1] = blank;

if (x <8)

{

gem [x + 1] [y-1] = blank;

Score + = 10;

}

}

if (x <8)

{

gem [x + 1] [y] = blank;

if (y <7)

{

gem [x + 1] [y + 1] = blank;

Score + = 10;

}

}

if (y <7)

{

gem [x] [y + 1] = blank;

if (x> 1)

{

gem [x-1] [y + 1] = blank;

Score + = 10;

}

}

gem [x] [y] = blank;

Time + = T / MaxT;

if (Time> T)

Time = T;

print ();

Sleep (V);

fall ();

if (! baidu ())

Blank ();

break;

case qicai:

t = color (rand ()% 7 + 1);

putimage (60 * y, 60 * (x-1), & img [int (t)]);

Sleep (V);

for (i = 1; i <9; i ++)

for (j = 0; j <8; j ++)

if (gem [i] [j] == t)

{

gem [i] [j] = blank;

putimage (60 * j, 60 * (i-1), & img [0]);

Score + = 10;

}

gem [x] [y] = blank;

Time + = T / MaxT;

if (Time> T)

Time = T;

print ();

fall ();

if (! baidu ())

Blank ();

break;

case alarm:

Time = T;

gem [x] [y] = blank;

print ();

fall ();

if (! baidu ())

Blank ();

break;

}

break;

}

else if (x1> 480 && x1 <560 && y1> 400 && y1 <480)

{

if (Music)

mciSendString ("stop mymusic", NULL, 0, NULL);

else

mciSendString ("play mymusic from 0 repeat", NULL, 0, NULL);

Music =! Music;

putimage (480, 400, & music_img [int (Music)]);

}

else if (x1> 560 && x1 <640 && y1> 400 && y1 <480)

exit (0);

}

}

now = clock ();

if (now-start> = CLOCKS_PER_SEC * MaxT / T)

{

start = now;

Time--;

New ();

if (Time <= 0)

return;

}

}

while (m.mkLButton && m.y <480)

{

m = GetMouseMsg ();

x = m.x;

y = m.y;

if (x-x1> 30 || x1-x> 30 || y-y1> 30 || y1-y> 30)

{

sign = false;

break;

}

now = clock ();

if (now-start> = CLOCKS_PER_SEC * MaxT / T)

{

start = now;

Time--;

New ();

if (Time <= 0)

return;

}

}

if (sign)

{

putimage (x1-x1% 60, y1-y1% 60, & img [int (gem [y1 / 60 + 1] [x1 / 60])], SRCPAINT);

continue;

}

if (y1-y> 30 && y1 / 60> 0)

fx = 'u';

if (y-y1> 30 && y1 / 60 <7)

fx = 'd';

if (x1-x> 30 && x1 / 60> 0)

fx = 'l';

if (x-x1> 30 && x1 / 60 <7)

fx = 'r';

x = y1 / 60 + 1;

y = x1 / 60;

x1 = y1 = 0;

switch (fx)

{

case 'u': x1 = -1; break;

case 'd': x1 = 1; break;

case 'l': y1 = -1; break;

case 'r': y1 = 1; break;

case '\ 0': continue;

}

for (i = 0; i <60;)

{

putimage (60 * y, 60 * (x-1), & img [0]);

putimage (60 * y, 60 * (x-1), & img [0]);

i + = 1;

putimage (60 * (y + y1)-i * y1, 60 * (x-1 + x1)-i * x1, & img [int (gem [x + x1] [y + y1])]);

putimage (60 * y + i * y1, 60 * (x-1) + i * x1, & img [int (gem [x] [y])]);

Sleep (2);

}

t = gem [x] [y];

gem [x] [y] = gem [x + x1] [y + y1];

gem [x + x1] [y + y1] = t;

if (judge ())

{

draw ();

if (! baidu ())

Blank ();

}

else

{

for (i = 0; i <60;)

{

putimage (60 * y, 60 * (x-1), & img [0]);

putimage (60 * y, 60 * (x-1), & img [0]);

i + = 1;

putimage (60 * (y + y1)-i * y1, 60 * (x-1 + x1)-i * x1, & img [int (gem [x + x1] [y + y1])]);

putimage (60 * y + i * y1, 60 * (x-1) + i * x1, & img [int (gem [x] [y])]);

Sleep (2);

}

t = gem [x] [y];

gem [x] [y] = gem [x + x1] [y + y1];

gem [x + x1] [y + y1] = t;

}

now = clock ();

if (now-start> = CLOCKS_PER_SEC * MaxT / T)

{

start = now;

Time--;

New ();

if (Time <= 0)

return;

}

} while (true);

}

/ **************** Main function ****************** /

int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

try

{

// load material

load ();

}

catch (int)

{

ofstream fout ("Archive.dat");

fout <

}

// open interface

initgraph (640, 480);

// game process

do

{

if (Music)

mciSendString ("play mymusic from 0 repeat", NULL, 0, NULL);

play ();

if (Music)

mciSendString ("stop mymusic", NULL, 0, NULL);

Flag = false;

} while (quit ());

// close the game

ofstream fout ("Archive.dat");

fout <

fout.close ();

mciSendString ("close mymusic", NULL, 0, NULL);

closegraph ();

return 0;

}

/ ************** THE END **************** /

 


Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.