- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想创建一个游戏,您可以在其中尝试避开“攻击”您的物体(圆圈)。我这样做的方式:
但是,当我的 distanceToPlayer_x(见代码)为正数或 distanceToPlayer_x 和 distanceToPlayer_y 均为负数时,它不起作用,因此除数再次变为正数。
我知道为什么会这样,但我已经尝试了 2 个小时来解决它,但再也无法忍受痛苦了:P。
希望大家能帮帮我。
代码:
namespace AI
{
public partial class mainClass : Form
{
//variables
int health;
double startPosition_x, startPosition_y, angle;
float x, y, speed, AI_x, AI_y, distanceToPlayer_x, distanceToPlayer_y;
//gameloop
Timer gameLoop;
//field
Bitmap bmp;
//player color
Pen playerColor;
//Random
Random random_x, random_y;
//constructor
public mainClass()
{
InitializeComponent();
Initialization();
}
//on startup do this:
private void Initialization()
{
//initializing variables
health = 100;
speed = (float) 0.75;
//startposition
startPosition_x = pbField.Width / 2;
startPosition_y = pbField.Height / 2;
//set x and y value to start position
x = (float) startPosition_x;
y = (float)startPosition_y;
//random
random_x = new Random();
random_y = new Random();
AI_x = 0;//random_x.Next(1, 550);
AI_y = 0;//random_y.Next(1, 320);
//player color
playerColor = new Pen(Color.Red, 5);
//gameloop
gameLoop = new Timer();
gameLoop.Tick += new EventHandler(gameMethode);
gameLoop.Interval = 5;
gameLoop.Start();
}
//the gameloop
private void gameMethode(object sender, EventArgs e)
{
//field
bmp = new Bitmap(550, 320);
pbField.Image = bmp;
using (Graphics g = Graphics.FromImage(bmp))
{
//key manager
if (InputManager.pressed(Keys.W))
{
y -= speed;
}
else if (InputManager.pressed(Keys.S))
{
y += speed;
}
else if (InputManager.pressed(Keys.A))
{
x -= speed;
}
else if (InputManager.pressed(Keys.D))
{
x += speed;
}
g.DrawEllipse(playerColor, AI_x, AI_y, 5, 5);
g.DrawEllipse(playerColor, x, y, 5, 5);
attackPlayer();
}
}
//attack player method
private void attackPlayer()
{
//the distance to the player
distanceToPlayer_x = AI_x - x;
distanceToPlayer_y = AI_y - y;
angle = Math.Atan(distanceToPlayer_y / distanceToPlayer_x);
Console.WriteLine("Radiants: " + angle);
Console.WriteLine("Degrees: "+ angle * (180 / Math.PI));
AI_x += (float) Math.Cos(angle) * (speed/(float)1.25);
AI_y += (float) Math.Sin(angle) * (speed/(float)1.25);
}
//if keydown
private void mainClass_KeyDown(object sender, KeyEventArgs e)
{
//if escape button is pressed
if (e.KeyCode == Keys.Escape)
{
Application.Exit();
}
InputManager.changeState(e.KeyCode, true);
}
//if keyup
private void mainClass_KeyUp(object sender, KeyEventArgs e)
{
InputManager.changeState(e.KeyCode, false);
}
}
}
最佳答案
当计算整个范围 [0..2 * pi]
角度时,典型的解决方案涉及Atan2
方法:
angle = Math.Atan2(distanceToPlayer_y, distanceToPlayer_x);
参见 https://msdn.microsoft.com/en-us/library/system.math.atan2(v=vs.110).aspx详情
关于c# - 攻击/跟随我的玩家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40287804/
这个问题在这里已经有了答案: What does the question mark character ('?') mean in C++? (8 个答案) 关闭 7 年前。 这一行我看不懂为什么
在构建模式下甚至可以有两个玩家吗?查看 Roblox 开发者杂志文章“What did you sleigh?”,它在玩家列表中显示了两个“玩家”。 最佳答案 打开 Roblox Studio 转到任
在构建模式下甚至可以有两个玩家吗?查看 Roblox 开发者杂志文章“What did you sleigh?”,它在玩家列表中显示了两个“玩家”。 最佳答案 打开 Roblox Studio 转到任
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
“Clash of Clans”使用 Game Center 对玩家进行身份验证并将其与现有的远程存储游戏状态相关联。 据我所知,游戏仅在客户端提供玩家标识符。是否有支持的技术来安全地验证用户而不是仅
我正在开发多人游戏,但我无法找出如何将其他客户端连接到创建的游戏。我的意思是客户端 A 创建到服务器的套接字连接,其他客户端(A,B ...)如何连接到客户端 A?有人可以帮我吗? 附注我是网络编程新
我正在尝试使用浏览器控制台一步一步地制作井字游戏,并最终改进我的功能。然而,我被困在玩家2回合(ttt_player2_turn()),我必须检查箱子是否为空。看来我在这个例子中的论证有问题。感谢您的
如果我向上移动玩家 1 和玩家 2,假设我按下玩家 1 的向下键,我的玩家将停止向上移动。我找不到问题所在。有人可以帮助我并解释我做错了什么吗? package game; import java.a
我正在创建一个自上而下的 2D 游戏,并且使用 Box2D 来模拟物理,我的问题是: 如何使玩家保持与我的宇宙飞船的相对速度,并且仍然能够在飞船也在移动的情况下围绕我的玩家移动? 我在下面放了一个插图
我是 Java 新手,我正在尝试制作一个简单的游戏来娱乐。我首先尝试将 repaint 放入 PaintComponent() 中,它一直有效,直到我尝试添加一些背景。有谁知道如何让我的玩家在有或没有
//我正在尝试对玩家 2 的代码进行一些编辑,因此我删除了涉及玩家 1 的所有内容。但出于某种原因,如果没有玩家 1 的代码,玩家 2 根本不会执行任何操作。(假设使用 i、j、k 和 l 键 mov
我接到了一项任务,要编写一个由人类玩家和 AI 玩家组成的 NIM 游戏。游戏是“Misere”(最后一个必须拿起一根棍子的人输了)。 AI 应该使用 Minimax 算法,但它正在采取使其输得更快的
我是一名优秀的程序员,十分优秀!