双人贪吃蛇(适合异地情侣2个人玩的手机游戏)

http://www.itjxue.com  2023-02-27 07:14  来源:未知  点击次数: 

求C语言 小游戏设计

我写了个贪吃蛇,有单人版,也有双人版

这是单人版:

#include?stdio.h

#include?stdlib.h

#include?windows.h

#include?conio.h

#include?time.h

#include?malloc.h

int?food[2];

int?feng;

int?dengji=3;

int?speed=150;

struct?snake

{

?int?x,y,life;

?struct?snake?*next;

};

void?welcome()

{

?system("MODE?con:?COLS=79?LINES=24");

?system("color?8F");

?printf("欢迎来到贪吃蛇的世界\n");

?printf("??????By?HB\n");

?printf("↑?↓?←?→\n");

?printf("上?下?左?右\n");

?printf("食物为:★\n");

?printf("按空格暂停\n");

?printf("按Z(大写)切换等级\n");

?printf("等级从5级到1级是从高到低\n");

?printf("注意:每次增加的分数=当前等级*10\n");

?printf("按任意键开始游戏!\n");

?getch();

?system("cls");

}

void?gotoxy(int?x,?int?y)

{

?COORD?coord;

?coord.X?=?x;coord.Y?=?y;

?SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),?coord);

}

void?makefood(struct?snake*p)

{

?int?fx;

?struct?snake*p1=p;

????srand(time(NULL));

?fx=rand()%77+2;

?if(fx%2==0)

?{

????????fx--;

?}

?food[0]=fx;

?food[1]=rand()%22+1;

????while(p!=NULL)

????{

??if(p-x==food[0]p-y==food[1])

??{

???makefood(p1);

?????}

????????p=p-next;

?}

}

void?drawmap(struct?snake*?p)

{

?system("cls");

?printf("你的分数为:%d分????当前等级为:%d级",feng,dengji);

????gotoxy(p-x,p-y);

?printf("◇");

????p=p-next;?

?while(p!=NULL)

?{

??gotoxy(p-x,p-y);

??printf("※");

??p=p-next;

?}

????gotoxy(food[0],food[1]);

?printf("★");

}

struct?snake?*mvsnake(struct?snake?*p,int?z)

{

?struct?snake?*p2,*p3;

?int?x,y;

?x=p-x;

?y=p-y;

????switch(z)

????{

??case?1:

??{

???x-=2;?

???break;

????????}

??case?2:

??{

???x+=2;

???break;

??}

??case?3:

??{

???y--;

???break;

??}

????????case?4:

??{

???y++;

???break;

??}

????}

????p2=(struct?snake*)malloc(sizeof(struct?snake));

?p2-x=x;

?p2-y=y;

????p2-life=1;

?p2-next=p;

????

?if(p2-x=79||p2-y=24||p2-x0||p2-y1)

?{

??p2-life=0;

?}

?p3=p;

?while(p3!=NULL)

?{

??if(p2-x==p3-xp2-y==p3-y)

??{

???p2-life=0;

??}

??p3=p3-next;

?}

?if(p2-x==food[0]p2-y==food[1])

?{

??feng+=dengji*10;

??makefood(p2);

?}

?else

?{

??while(p-next-next!=NULL)

??{

???p=p-next;

??}

??p3=p-next;

??p-next=NULL;

??free(p3);

?}

?return?p2;

}

int?scan(int?z)

{

????char?ch;

?if(kbhit()){

???ch=getch();

???switch(ch)

???{

????

????case?75:if(z!=2)z=1;break;

????case?77:if(z!=1)z=2;break;

????case?72:if(z!=4)z=3;break;

????case?80:if(z!=3)z=4;break;

????case?32:z=5;break;

????case?'Z':speed-=50;

?????????????dengji++;

?????????????if(speed==0){speed=250;dengji=1;}

???????break;

????default?:break;

???}

???if(ch==27)z=27;

???fflush(stdin);

??}

?return?z;

}

int?main(int?argc,?char?*argv[])

{

?welcome();

?loop:system("cls");

????struct?snake?*snakenext;

?struct?snake?*snk=(struct?snake*)malloc(sizeof(struct?snake));

?snk-x=15;

?snk-y=15;

????snk-life=1;

?snk-next=(struct?snake*)malloc(sizeof(struct?snake));

?snk-next-x=14;

?snk-next-y=snk-y;

?snk-next-next=(struct?snake*)malloc(sizeof(struct?snake));

?snk-next-next-x=13;

?snk-next-next-y=snk-y;

?snk-next-next-next=NULL;

?int?z=2;

?

?makefood(snk);

?while(1)

?{

??int?temp_z=z;??????

??z=scan(z);?

??if(z==27)exit(0);??????

??if(z==5)

??{?

???gotoxy(30,15);?????????????

???printf("暂停");???

???getch();z=temp_z;

??}?

??snk=mvsnake(snk,z);

?????if(snk-life==0)break;

??drawmap(snk);

??Sleep(speed);?

?}

????system("cls");

?gotoxy(25,11);

?printf("GAME?OVER,你的最终分数为:%d分\n",feng);

?gotoxy(25,12);

?printf("按空格重新开始,按其他键结束!\n");

?while(snk!=NULL)

?{

??snakenext=snk-next;

??free(snk);

??snk=snakenext;

?}

?Sleep(500);

?char?cha;

?cha=getch();

?if(cha==32)

?{

??goto?loop;

?}

????return?0;

}

这是双人版:

#include?stdio.h

#include?stdlib.h

#include?windows.h

#include?conio.h

#include?time.h

#include?malloc.h

int?food[2];

int?feng1,feng2;

int?speed=150;

int?dengji=3;

int?chi;

struct?snake

{

?int?x,y,life;

?struct?snake?*next;

};

void?welcome()

{

?system("MODE?con:?COLS=79?LINES=24");

?system("color?8F");

?printf("欢迎来到双人贪吃蛇游戏\n");

?printf("??????By?HB\n");

?printf("玩家1:□□◇\n");

?printf("W?S?A?D(大写)\n");

?printf("上?下?左?右\n");

?printf("玩家2:■■◆\n");

?printf("↑?↓?←?→\n");

?printf("上?下?左?右\n");

?printf("食物为:★\n");

?printf("按空格暂停\n");

?printf("按Z(大写)切换等级\n");

?printf("等级从5级到1级是从高到低\n");

?printf("注意:每次增加的分数=当前等级*10\n");

?printf("按任意键开始游戏!\n");

?getch();

?system("cls");

}

void?gotoxy(int?x,?int?y)

{

?COORD?coord;

?coord.X?=?x;coord.Y?=?y;

?SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),?coord);

}

void?makefood(struct?snake?*p,struct?snake?*p2)

{

?int?fx;

?struct?snake*p1=p;

?struct?snake*p3=p2;

????srand(time(NULL));

?fx=rand()%77+2;

?if(fx%2==0)

?{

????????fx--;

?}

?food[0]=fx;

?food[1]=rand()%22+1;

????while(p!=NULLp2!=NULL)

?{

??if((p-x==food[0]p-y==food[1])||(p2-x==food[0]p2-y==food[1]))

??{

???makefood(p1,p3);

??}

????????p=p-next;

??p2=p2-next;

?}

}

void?drawmap(struct?snake?*p,struct?snake?*p2)

{

?system("cls");

????printf("玩家1的分数为:%d分?????????当前等级为:%d级??????????玩家2的分数为:%d分",feng1,dengji,feng2);

????gotoxy(p-x,p-y);

?printf("◇");

????p=p-next;?

?gotoxy(p2-x,p2-y);

?printf("◆");

????p2=p2-next;?

?while(p!=NULL)

?{

??gotoxy(p-x,p-y);

??printf("□");

??p=p-next;

?}

????while(p2!=NULL)

?{

??gotoxy(p2-x,p2-y);

??printf("■");

??p2=p2-next;

?}

????gotoxy(food[0],food[1]);

?printf("★");

}

struct?snake?*mvsnake(struct?snake?*p,struct?snake?*p4,int?z,int?i)

{

?struct?snake?*p2,*p3;

?int?x,y;

?x=p-x;

?y=p-y;

????switch(z)

????{

??case?1:

??{

???x-=2;?

???break;

????????}

??case?2:

??{

???x+=2;

???break;

??}

??case?3:

??{

???y--;

???break;

??}

????????case?4:

??{

???y++;

???break;

??}

????}

????p2=(struct?snake*)malloc(sizeof(struct?snake));

?p2-x=x;

?p2-y=y;

????p2-life=1;

?p2-next=p;

????

?if(p2-x=79||p2-y=24||p2-x0||p2-y1)

?{

??p2-life=0;

?}

?p3=p;

?while(p3!=NULL)

?{

??if(p2-x==p3-xp2-y==p3-y)

??{

???p2-life=0;

??}

??p3=p3-next;

?}

????

?if(p2-x==food[0]p2-y==food[1])

?{

??if(i==1)

??{

???feng1+=dengji*10;

??}

??else?if(i==2)

??{

???feng2+=dengji*10;

??}

??makefood(p2,p4);

?}

?else

?{

??while(p-next-next!=NULL)

??{

???p=p-next;

??}

??p3=p-next;

??p-next=NULL;

??free(p3);

?}

?return?p2;

}

int?scan(int?z)

{

????char?ch;

?if(kbhit()){

???ch=getch();

???switch(ch)

???{

????

????case?75:

????case?'A':if(z!=2)z=1;break;

????case?77:

????case?'D':if(z!=1)z=2;break;

????case?72:

????case?'W':if(z!=4)z=3;break;

????case?80:

????case?'S':if(z!=3)z=4;break;

????case?32:z=5;break;

????case?'Z':speed-=50;

?????????????dengji++;

?????????????if(speed==0){speed=250;dengji=1;}

???????break;

????default?:break;

???}

???if(ch==27)z=27;

??}

?return?z;

}

int?main(int?argc,?char?*argv[])

{

?welcome();

?loop:system("cls");

????struct?snake?*snakenext;

?struct?snake?*snk=(struct?snake*)malloc(sizeof(struct?snake));

?snk-x=15;

?snk-y=15;

????snk-life=1;

?snk-next=(struct?snake*)malloc(sizeof(struct?snake));

?snk-next-x=14;

?snk-next-y=snk-y;

?snk-next-next=(struct?snake*)malloc(sizeof(struct?snake));

?snk-next-next-x=13;

?snk-next-next-y=snk-y;

?snk-next-next-next=NULL;

?struct?snake?*snake2next;

?struct?snake?*snk2=(struct?snake*)malloc(sizeof(struct?snake));

?snk2-x=17;

?snk2-y=10;

????snk2-life=1;

?snk2-next=(struct?snake*)malloc(sizeof(struct?snake));

?snk2-next-x=16;

?snk2-next-y=snk2-y;

?snk2-next-next=(struct?snake*)malloc(sizeof(struct?snake));

?snk2-next-next-x=15;

?snk2-next-next-y=snk2-y;

?snk2-next-next-next=NULL;

?int?z=2;

?int?k=2;

????makefood(snk,snk2);

?

?while(1)

?{

??int?temp_z=z;??????

??z=scan(z);

??k=scan(k);

??if(z==27)exit(0);??????

??if(z==5)

??{?

???gotoxy(30,15);?????????????

???printf("暂停");???

???getch();z=temp_z;

??}?

??snk=mvsnake(snk,snk2,z,1);

????????snk2=mvsnake(snk2,snk,k,2);

??if(snk-life==0||snk2-life==0)break;

?????drawmap(snk,snk2);

??Sleep(speed);?

?}

????system("cls");

?gotoxy(15,11);

?printf("GAME?OVER,玩家1的分数为:%d分,玩家2的分数为:%d分\n",feng1,feng2);

?gotoxy(33,12);

?if(feng1feng2)

?{

??printf("玩家1赢了!\n");

?}

?else?if(feng2feng1)

?{

??printf("玩家2赢了!\n");

?}

?else

?{

??printf("你们打成了平手!\n");

?}

????gotoxy(25,13);

?printf("按空格重新开始,按其他键结束!\n");

?while(snk!=NULL)

?{

??snakenext=snk-next;

??free(snk);

??snk=snakenext;

?}

?while(snk2!=NULL)

?{

??snake2next=snk2-next;

??free(snk2);

??snk2=snake2next;

?}

?Sleep(500);

?char?cha;

?cha=getch();

?if(cha==32)

?{

??goto?loop;

?}

????return?0;

}

找个双人玩的游戏

curi双人网球

curi双人网球小游戏攻略:$False$,

[麻将]双人麻将

这可能是你见过的第一款接近街机麻将的FLASH麻将,采用日本算番规则,共分四关,图片、声音采集于雀美眉麻将馆,除了电脑没智能,其他功能十分完备,要过关首先得会算番,要不然就算小胡也可能亏本。鼠标左键控制.,

黄金矿工双人协力版

根据黄金矿工原始版本修改的黄金矿工双人版。需要两个人配合!当然你也可以学习周伯通左右开弓,双手互博,真的很爽!wasd控制第一个人,上下左右控制第二个人。

逃出双人床房间

奇怪的双人床房间,屋里窗台上有个可爱的红苹果。快快行动,收集线索吧。 鼠标操作。

[动作]双人玛丽

玛丽兄弟小游戏说明:点击“start”开始游戏。红色玛丽键盘左右键控制移动,“;”键跳跃,绿色路易V、B键控制移动,S键跳跃。

双人气球冲气

双人气球冲气小游戏攻略:游戏快速点击空格键就可以。

双人对战弹球

双人对战弹球小游戏攻略:游戏用W.A.D.键,上下左右键。

curi双人网球

curi双人网球小游戏攻略:鼠标移动控制,点左键打球

双人象棋

双人象棋小游戏攻略:双人象棋

双人扫地雷

双人扫地雷小游戏攻略:双人扫地雷

双人坦克大战

双人坦克大战小游戏攻略:单人游戏:W、S上下调整炮杆角度; A、D左右移动; J发射炮弹; K使用法宝 双人游戏:红方控制同上。绿方使用方向键控制;小键盘上0键发射炮弹;小键盘.键使用法宝.

双人对战直升机

双人对战直升机小游戏攻略:双人对战直升机 游戏介绍:相当不错的两人对战游戏,快找个朋友一起战斗吧。操作指南:键盘控制,开始的时候有操作说明。 player1:A Z键上下移动,空格键射击,X键必杀技 player2: 小键盘- +上下移动,0键射击,1贱必杀技

双人泡泡堂

双人泡泡堂小游戏攻略:点start game开始,方向键移动,空格键放炸弹,可以单人或双人玩,双人玩:play1. 方向键移动,enter键放炸弹,play2:W.A.S.D键移动,空格键放炸弹!

黄金矿工双人版

黄金矿工双人版小游戏攻略:双人新淘金者,双人黄金矿工协力版,双人版黄金矿工,双人挖金子,双人挖金矿,根据黄金矿工原始版本修改的黄金矿工双人版。需要两个人配合!当然你也可以学习周伯通左右开弓,双手互博,真的很爽!wasd控制第一个人,上下左右控制第二个人

双人开心泡泡

双人开心泡泡小游戏攻略:很好玩的小游戏,可以单人玩,也可以双人玩。就是像打排球一样,不让泡泡掉自己这边,注意,泡泡很脆的,很容易就会破,在左上角有个图,显示的红条越满,就是表示要破了,就要赶紧顶到对方那边去。 蓝兔的操作方法,方向键控制,向上键顶泡泡,双人时,Z X 控制左右,空格顶泡泡

双人国王炮手

双人国王炮手小游戏攻略:百战天虫之城堡大战,打炮小游戏,既可以选和电脑对战,也可以来双人对战。操作很简单,用键盘的上下键调节炮口,按住空格键蓄力,时间长,能量就会满,泡就打得远,到合适的时机就松开空格,发射。来玩玩吧。

双人QQ堂

双人QQ堂小游戏攻略:双人QQ堂,双人小游戏,双人游戏,双人qq堂,点击“start game”,选择“1 player”单人游戏或“2 players”双人游戏,再选择难度,键盘左右键或A、D键选择主角,空格键或回车键确认后开始游戏。单人模式:上下左右键控制移动,空格键放炸弹,P键暂停。。 双人模式:1P:W、S、A、D键控制移动,空格键放炸弹;2P:上下左右键控制移动,回车键放炸弹。

双人炸弹人

双人炸弹人小游戏攻略:可爱炸弹人2,可供两人玩,单人:方向键移动,空格键放炸弹,双人play1:方向键移动,键放炸弹,play2:W.A.S.D键移动,;键放炸弹!

双人推砖块

双人推砖块小游戏攻略:游戏还比较耐玩,可以两个人玩,你也可以与电脑挑战,看到谁先把砖块推向对方,有一块掉在谁方,谁就输了。游戏点play按纽开始,play1下面选择human,,play2下面选择cpu,就是你跟你电脑玩,如果两个都是选择human,可以两个人同时玩,play1,和play2分别用A,L键出击。

双人贪吃蛇

双人贪吃蛇小游戏攻略:可以2个人一起玩的贪吃蛇有游戏。 玩家1 上下左右控制,玩家2 wsad控制移动,空格开始。

java 双人贪吃蛇

package game;

/*这是一个双人贪吃蛇游戏

*玩家一 A S D W 控制方向

*玩家二 上下左右 控制方向

*当某玩家无路可走的时候既输

*/

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class HsGame extends JFrame {

HsGame(String str) {

// 设置主面版

this.setTitle(str);

this.setSize(910, 630);

this.setLocation(50, 50);

MyPanel mp = new MyPanel();

this.add(mp);

this.addKeyListener(mp);

new Thread(mp).start();

}

// 主线程

public static void main(String[] args) {

HsGame m = new HsGame("贪吃蛇竞技版");

m.setVisible(true);

}

}

class MyPanel extends JPanel implements Runnable, KeyListener {

int[][] s1 = new int[180][120];

int[][] s2 = new int[180][120];

int x1 = 40;

int y1 = 60;

int x2 = 140;

int y2 = 60;

// 设置线程休眠时间

int sleep = 50;

// 设置初始方向

int fangxiang1 = 2;

int fangxiang2 = 0;

// 构造函数

MyPanel() {

// 初始化界面

for (int ix = 0; ix 180; ix++) {

for (int iy = 0; iy 120; iy++) {

s1[ix][iy] = 0;

s2[ix][iy] = 0;

}

}

// 设置边界

// 上下边界

for (int ix = 0; ix 180; ix++) {

s1[ix][0] = 1;

s1[ix][119] = 1;

s2[ix][0] = 1;

s2[ix][119] = 1;

}

// 左右边界

for (int iy = 0; iy 120; iy++) {

s1[0][iy] = 1;

s1[179][iy] = 1;

s2[0][iy] = 1;

s2[179][iy] = 1;

}

}

// 画板

public void paint(Graphics g) {

// 显示玩家一

g.setColor(Color.red);

for (int ix = 0; ix 180; ix++) {

for (int iy = 0; iy 120; iy++) {

if (s1[ix][iy] == 1) {

g.fillRect(ix * 5, iy * 5, 5, 5);

}

}

}

// 显示玩家二

g.setColor(Color.blue);

for (int ix = 0; ix 180; ix++) {

for (int iy = 0; iy 120; iy++) {

if (s2[ix][iy] == 1) {

g.fillRect(ix * 5, iy * 5, 5, 5);

}

}

}

// 画出边界

g.setColor(Color.black);

for (int i = 0; i 180; i++) {

g.fillRect(i * 5, 0, 5, 5);

g.fillRect(i * 5, 119 * 5, 5, 5);

}

for (int i = 0; i 120; i++) {

g.fillRect(0, i * 5, 5, 5);

g.fillRect(179 * 5, i * 5, 5, 5);

}

}

public void run() {

while (true) {

switch (fangxiang1) {

case 0:

x1--;

break;

case 1:

y1--;

break;

case 2:

x1++;

break;

case 3:

y1++;

}

switch (fangxiang2) {

case 0:

x2--;

break;

case 1:

y2--;

break;

case 2:

x2++;

break;

case 3:

y2++;

}

// 判断死活

if (s1[x1][y1] == 1 || s2[x1][y1] == 1) {

// 弹出player2胜利对话框

JOptionPane.showMessageDialog(null,

"player 2 win!",

"Game Over !", JOptionPane.ERROR_MESSAGE);

// 结束游戏

System.exit(0);

} else {

s1[x1][y1] = 1;

}

if (s2[x2][y2] == 1 || s1[x2][y2] == 1) {

// 弹出player1胜利对话框

JOptionPane.showMessageDialog(null,

"player 1 win!",

"Game Over !", JOptionPane.ERROR_MESSAGE);

// 结束游戏

System.exit(0);

} else {

s2[x2][y2] = 1;

}

try {

Thread.sleep(sleep);

} catch (Exception e) {

e.printStackTrace();

}

// 重画

this.repaint();

}

}

public void keyTyped(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

// 玩家一控制

if (e.getKeyCode() == 65) {

if (fangxiang1 != 2) {

fangxiang1 = 0;

System.out.println("player 1 left");

}

}

if (e.getKeyCode() == 87) {

if (fangxiang1 != 3) {

fangxiang1 = 1;

System.out.println("player 1 up");

}

}

if (e.getKeyCode() == 68) {

if (fangxiang1 != 0) {

fangxiang1 = 2;

System.out.println("player 1 right");

}

}

if (e.getKeyCode() == 83) {

if (fangxiang1 != 1) {

fangxiang1 = 3;

System.out.println("player 1 down");

}

}

// 玩家二控制

if (e.getKeyCode() == 37) {

if (fangxiang2 != 2) {

fangxiang2 = 0;

System.out.println("player 2 left");

}

}

if (e.getKeyCode() == 38) {

if (fangxiang2 != 3) {

fangxiang2 = 1;

System.out.println("player 2 up");

}

}

if (e.getKeyCode() == 39) {

if (fangxiang2 != 0) {

fangxiang2 = 2;

System.out.println("player 2 right");

}

}

if (e.getKeyCode() == 40) {

if (fangxiang2 != 1) {

fangxiang2 = 3;

System.out.println("player 2 down");

}

}

}

public void keyReleased(KeyEvent e) {

}

}

(责任编辑:IT教学网)

更多

推荐微软认证文章