双人贪吃蛇(适合异地情侣2个人玩的手机游戏)
求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) {
}
}